Как вставить файлы BLOB и CLOB в MySQL?
Я хочу хранить изображения и файлы .docx/.doc,.pptx/.ppt,.pdf, используя переднюю часть моего программного обеспечения. Я не понимаю, как это реализовать и как вставлять файлы BLOB и CLOB в таблицу. Пожалуйста, помогите.
Я использую Kubuntu 11.04, MySQL5, Qt 4.7.3.
Ответы
Ответ 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" на "пустую строку", чтобы он мог читать файл из любого места.