31

ソフトウェアのフロント エンドを使用して、画像と .docx/.doc、.pptx/.ppt、.pdf ファイルを保存したいと考えています。これを実装する方法と、BLOB および CLOB ファイルをテーブルに挿入する方法がわかりません。助けてください。

Kubuntu 11.04、MySQL5、Qt 4.7.3 を使用しています。

4

6 に答える 6

38

ふたつのやり方:

1 - LOAD_FILE関数を使用する -

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

2 - ファイルを 16 進文字列として挿入します。例: -

INSERT INTO table1 VALUES 
  (1, x'89504E470D0A1A0A0000000D494844520000001000000010080200000090916836000000017352474200AECE1CE90000000467414D410000B18F0BFC6105000000097048597300000EC300000EC301C76FA8640000001E49444154384F6350DAE843126220493550F1A80662426C349406472801006AC91F1040F796BD0000000049454E44AE426082');
于 2012-05-24T06:56:03.470 に答える
13
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_pa​​cket バイト未満でなければなりません。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 では、これでうまくいきます。

  1. ファイルを /tmp にコピーします
  2. 所有権を mysql ユーザーに変更しますchown mysql:mysql /tmp/yourfile
  3. mysql root ユーザーとして mysql にログインし、FILE 権限があることを確認します。
  4. 挿入ステートメントを実行します
于 2013-08-06T13:52:02.273 に答える
9

または、MySQL Workbench を使用して行、最後の行を選択し、blob なしで行を挿入してから、右クリックして [ファイルから値を読み込む] を選択するだけです。

ここに画像の説明を入力

于 2015-04-29T14:30:31.187 に答える