2012-05-24 12 views
18

Chcę przechowywać obrazy i pliki .docx/.doc, .pptx/.ppt, .pdf przy użyciu interfejsu z przodu mojego oprogramowania. Nie rozumiem, jak to zaimplementować i jak wstawić pliki BLOB i CLOB do tabeli. Proszę pomóż.Jak wstawiać pliki BLOB i CLOB w MySQL?

Używam Kubuntu 11.04, MySQL5, Qt 4.7.3.

Odpowiedz

23

dwa sposoby:

1 - używać LOAD_FILE funkcję -

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

2 - wkładka plik łańcucha, na przykład sześciokątnego -

INSERT INTO table1 VALUES 
    (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082'); 
+2

3-szy opcja jest blisko 2 jeden i brzmi 'INSERT INTO VALUES Tabela 1 (1, 0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);'. – glglgl

+0

Następujące nie działa: INSERT INTO table1 VALUES (1, LOAD_FILE (data.png)); – user1411472

+1

Sprawdź, czy plik istnieje, sprawdź ścieżkę, sprawdź rozmiar pliku, czy jest to mniej więcej "max_allowed_packet". Czy masz uprawnienie PLIK? Jaki typ pola BLOB, czy wystarczy zapisać plik? – Devart

1
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png)); 

nie będzie działać, ale

INSERT INTO table1 VALUES(1, LOAD_FILE('data.png')); 

powinien (zakładając data.png istnieje w katalogu lokalnym)

11
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png') 

LOAD_FILE ma wiele warunków dołączonych do niego. Od MySQL documentation:

LOAD_FILE (nazwa_pliku)

Odczytuje plik i zwraca zawartość pliku jako ciąg znaków. Aby użyć tej funkcji, plik musi znajdować się na hoście serwera, należy podać pełną nazwę ścieżki do pliku i mieć uprawnienie FILE . Plik musi być czytelny dla wszystkich, a jego rozmiar jest mniejszy niż bajtów max_allowed_packet. Jeśli zmienna systemowa secure_file_priv jest ustawiona na niepustą nazwę katalogu, plik do załadowania musi być znajdujący się w tym katalogu.

Jeśli plik nie istnieje lub nie można go odczytać, ponieważ jeden z poprzedzających warunków nie jest spełniony, funkcja zwraca NULL.

Ponadto istnieją błędy z plikiem LOAD_FILE w systemie Linux. Zobacz http://bugs.mysql.com/bug.php?id=38403 dla błędu i MySQL LOAD_FILE returning NULL dla obejścia. Na Ubuntu 12.04, MySQL 5.5.32, to działa na mnie:

  1. skopiować plik do/tmp
  2. Zmiana własności do użytkownika mysql chown mysql:mysql /tmp/yourfile
  3. Zaloguj się jako użytkownik root mysql mysql więc na pewno masz przywilejem FILE
  4. uruchomić INSERT
+0

Wskazówka "secure_file_priv" zapisała mój dzień. Użyj 'mysql> SELECT @@ secure_file_priv; , aby zobaczyć aktualną wartość –

3

Albo można po prostu użyć MySQL Workbench wybierz wiersze, ostatnie wiersze, wstawić wiersz bez blob, a potem po prostu kliknij prawym przyciskiem i wybierz „wartość obciążenia z pliku” .

Powiązane problemy