Подтвердить что ты не робот

Как вставить файлы BLOB и CLOB в MySQL?

Я хочу хранить изображения и файлы .docx/.doc,.pptx/.ppt,.pdf, используя переднюю часть моего программного обеспечения. Я не понимаю, как это реализовать и как вставлять файлы BLOB и CLOB в таблицу. Пожалуйста, помогите.

Я использую Kubuntu 11.04, MySQL5, Qt 4.7.3.

4b9b3361

Ответ 1

Два способа:

1 - Используйте функцию LOAD_FILE -

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

2 - Вставить файл в виде шестнадцатеричной строки, например. -

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

Ответ 2

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

LOAD_FILE имеет множество условий, связанных с ним. Из Документация по MySQL:

LOAD_FILE (имя_файла)

Считывает файл и возвращает содержимое файла в виде строки. Чтобы использовать это функции, файл должен быть расположен на хосте сервера, вы должны укажите полное имя пути к файлу, и вы должны иметь ФАЙЛ привилегия. Файл должен быть доступен для чтения всем и его размер меньше, чем max_allowed_packet байт. Если системная переменная secure_file_priv установить на непустое имя каталога, файл, который должен быть загружен, должен быть расположенный в этом каталоге.

Если файл не существует или не может быть прочитан, потому что один из предшествующие условия не выполняются, функция возвращает NULL.

Кроме того, там есть ошибки с LOAD_FILE в Linux. См. http://bugs.mysql.com/bug.php?id=38403 для ошибки, а MySQL LOAD_FILE возвращает NULL для обходных путей. В Ubuntu 12.04, MySQL 5.5.32 это работает для меня:

  • Скопировать файл в /tmp
  • Изменить право собственности на пользователя mysql chown mysql:mysql /tmp/yourfile
  • Войдите в mysql как пользователь root mysql, чтобы убедиться, что у вас есть привилегия FILE
  • Запустите инструкцию insert

Ответ 3

Или вы можете просто использовать MySQL Workbench, выбрать строки, последние строки, вставить строку без blob, затем просто щелкнуть правой кнопкой мыши и выбрать "Загрузить значение из файла".

Ответ 4

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

не будет работать, но

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

должен (предполагая, что data.png существует в локальном каталоге)

Ответ 5

для тех людей, которые получают сообщение "Столбец" изображение "не может быть пустым" при сохранении блоба с помощью запроса: "

Откройте клиент MySql Command Line и войдите в систему как пользователь root и введите

mysql> SHOW VARIABLES LIKE "secure_file_priv";

это покажет вам безопасный путь, используемый MySql для доступа к файлам. что-то вроде

+------------------+-----------------------+
| Variable_name    | Value                 |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+

Вы можете вставить файлы в эту папку или изменить значение переменной "secure_file_priv" на "пустую строку", чтобы он мог читать файл из любого места.