Вопрос по ubuntu, qt4, mysql – Как вставить BLOB и CLOB файлы в MySQL?
1 - ИспользуйтеLOAD_FILE функция -
INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));
2 - Вставить файл в виде шестнадцатеричной строки, например, -
INSERT INTO table1 VALUES
(1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
INSERT INTO table1 VALUES (1, 0x89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082);
.
max_allowed_packet
, У вас есть привилегия FILE? Какого типа поле BLOB, достаточно ли для хранения файла?
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png')
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 userchown 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;
чтобы увидеть реальную стоимость