ソフトウェアのフロント エンドを使用して、画像と .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=38403を、回避策についてはMySQL LOAD_FILE が NULL を返すを参照してください。Ubuntu 12.04、MySQL 5.5.32 では、これでうまくいきます。
chown mysql:mysql /tmp/yourfile