Вопрос по ubuntu, qt4, mysql – Как вставить BLOB и CLOB файлы в MySQL?

21

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

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

Ваш Ответ

4   ответа
27

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

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

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

INSERT INTO table1 VALUES 
  (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
3-й вариант близок к 2-му и читается какINSERT INTO table1 VALUES (1, 0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);.
Выходные данные показывают, что значение было вставлено в таблицу, но при получении оно показывает NULL user1411472
Проверьте, существует ли файл, проверьте путь, проверьте размер файла, больше или меньше ихmax_allowed_packet, У вас есть привилегия FILE? Какого типа поле BLOB, достаточно ли для хранения файла?
Я также был бы очень благодарен, если кто-нибудь может помочь мне с концепцией загрузки файлов из базы данных. Я имею в виду, например, если я загружаю некоторые файлы .pdf или .jpg, то как клиент может загрузить их? user1411472
Не работает следующее: INSERT INTO table1 VALUES (1, LOAD_FILE (data.png)); user1411472
11
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png')

MySQL документация:

LOAD_FILE(file_name)

Reads the file and returns the file contents as a string. To use this function, the file must be located on the server host, you must specify the full path name to the file, and you must have the FILE privilege. The file must be readable by all and its size less than max_allowed_packet bytes. If the secure_file_priv system variable is set to a nonempty directory name, the file to be loaded must be located in that directory.

If the file does not exist or cannot be read because one of the preceding conditions is not satisfied, the function returns NULL.

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

Copy file to /tmp Change ownership to mysql user chown mysql:mysql /tmp/yourfile Log into mysql as mysql root user so you are sure you have FILE privilege Run your insert statement
secure_file_priv намек спас мой день. использованиеmysql> SELECT @@secure_file_priv; чтобы увидеть реальную стоимость
4

выбрать строки, последние строки, вставить строку без BLOB-объекта, затем просто щелкнуть правой кнопкой мыши и выбрать «Загрузить значение из файла».

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

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

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

Похожие вопросы