14

(Mac 上で) MySQL BLOB にファイルをロードしようとしました。

私のクエリは

INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))

エラーは表示されませんが、ファイルは BLOB に読み込まれません。

4

5 に答える 5

11

マニュアルには次のように記載されています。

LOAD_FILE(ファイル名)

ファイルを読み取り、ファイルの内容を文字列として返します。この機能を使用するには、ファイルがサーバーホスト上にあり、ファイルへのフルパス名を指定し、FILE権限を持っている必要があります。ファイルはすべての人が読み取れる必要があり、そのサイズはmax_allowed_pa​​cketバイト未満である必要があります。secure_file_privシステム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。

上記の条件のいずれかが満たされていないためにファイルが存在しないか、読み取ることができない場合、関数はNULLを返します。

MySQL 5.0.19以降、character_set_filesystemシステム変数は、リテラル文字列として指定されるファイル名の解釈を制御します。

mysql> UPDATE t
            SET blob_col=LOAD_FILE('/tmp/picture')
            WHERE id=1;

このことから、あなたの場合は間違っている可能性のあることが複数あります...

  • フルパスを通過していますか?
  • 特権は正しく設定されていますか?
  • 関数は何を返しますか?ヌル?
  • マニュアルに記載されているクエリで試してみましたか?
于 2011-11-22T16:31:43.120 に答える
7

Linuxでも同じ問題がありました...

select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL                        |
+-----------------------------+

ユーザーとグループの所有権が「mysql」に変更された後、最終的にファイルを正常にロードできました。

sudo chown mysql:mysql /tmp/data.blob
于 2013-04-14T22:47:10.567 に答える
5

Windows を使用している場合は、フル パスでスラッシュをダブル エスケープします。

于 2013-10-25T11:54:32.330 に答える
3

テストで見つけた警告をもう 1 つ追加したかっただけです。

使用select load_file('/path/to/theFile.txt');する場合、ロードしているファイルは、SQL インスタンスが実行されているマシン上にある必要があります。

私はMySQLワークベンチを使用して常にファイルをさまざまなSQLインスタンスにロードし、そのようなコマンドを使用LOAD DATA LOCAL INFILE 'C:/path/to/theFile.csv' INTO TABLEすると、ローカルハードドライブからファイルを簡単に取得してテーブルに処理するため、これは長い間私を苦しめました。実際のSQLインスタンスが実行されていた場所。ただし、load_fileコマンドは少なくとも私にとっては同じように動作しないようです (おそらく、私が知らない local_load_file() コマンドが存在する可能性があります)。MySQL は、SQL インスタンスが実行されているローカル システムからのファイルの検索のみを許可しているようです。

したがって、あなたが私のようで、load_file が常に NULL を返す理由がわからない場合でも、恐れることはありません...ファイルを SQL Server インスタンスにアップロードし、クエリ ブラウザからそのパスを使用すれば、すべてうまくいきます。

于 2014-12-24T00:38:39.393 に答える