ソフトウェアのフロントエンドを使用して、画像と.docx/.doc、.pptx/.ppt、.pdfファイルを保存したい。これを実装する方法と、BLOBファイルとCLOBファイルをテーブルに挿入する方法がわかりません。助けてください。
Kubuntu 11.04、MySQL5、Qt 4.7.3を使用しています。
二通り:
1- LOAD_FILE 関数を使用します-
INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));
2-ファイルを16進文字列として挿入します。 -
INSERT INTO table1 VALUES
(1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
INSERT INTO MY_TABLE(id, blob_col) VALUES(1, LOAD_FILE('/full/path/to/file/myfile.png')
LOAD_FILEには多くの条件が関連付けられています。 MySQLドキュメント から:
LOAD_FILE(ファイル名)
ファイルを読み取り、ファイルの内容を文字列として返します。この機能を使用するには、ファイルをサーバーホストに配置し、ファイルへのフルパス名を指定し、FILE権限が必要です。ファイルはすべて読み取り可能で、サイズはmax_allowed_packetバイト未満でなければなりません。 secure_file_privシステム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。
上記の条件のいずれかが満たされていないためにファイルが存在しないか、読み取ることができない場合、関数はNULLを返します。
また、LinuxのLOAD_FILEにはバグがあります。バグについては http://bugs.mysql.com/bug.php?id=384 を、回避策については MySQL LOAD_FILEはNULLを返します を参照してください。 Ubuntu 12.04、MySQL 5.5.32では、これは私のために機能します:
chown mysql:mysql /tmp/yourfile
または、単にMySQL Workbenchを使用して、行を選択し、最後の行を選択し、blobなしで行を挿入し、右クリックして[ファイルから値をロード]を選択します。
INSERT INTO table1 VALUES(1, LOAD_FILE(data.png));
動作しませんが、
INSERT INTO table1 VALUES(1, LOAD_FILE('data.png'));
should(data.pngがローカルディレクトリに存在すると仮定)
クエリを使用してBlobを保存しているときに「列 'image'をnullにすることはできません」というエラーが表示される人々
MySqlコマンドラインクライアントを開き、rootユーザーでログインしてタイプ
mysql> SHOW VARIABLES LIKE "secure_file_priv";
これにより、MySqlがファイルにアクセスするために使用する安全なパスが表示されます。何かのようなもの
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
このフォルダ内にファイルを貼り付けるか、「secure_file_priv」変数の値を「空の文字列」に変更して、どこからでもファイルを読み取れるようにすることができます。