(Mac 上で) MySQL BLOB にファイルをロードしようとしました。
私のクエリは
INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))
エラーは表示されませんが、ファイルは BLOB に読み込まれません。
(Mac 上で) MySQL BLOB にファイルをロードしようとしました。
私のクエリは
INSERT INTO MyTable VALUES('7', LOAD_FILE('Dev:MonDoc.odt'))
エラーは表示されませんが、ファイルは BLOB に読み込まれません。
マニュアルには次のように記載されています。
LOAD_FILE(ファイル名)
ファイルを読み取り、ファイルの内容を文字列として返します。この機能を使用するには、ファイルがサーバーホスト上にあり、ファイルへのフルパス名を指定し、FILE権限を持っている必要があります。ファイルはすべての人が読み取れる必要があり、そのサイズはmax_allowed_packetバイト未満である必要があります。secure_file_privシステム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。
上記の条件のいずれかが満たされていないためにファイルが存在しないか、読み取ることができない場合、関数はNULLを返します。
MySQL 5.0.19以降、character_set_filesystemシステム変数は、リテラル文字列として指定されるファイル名の解釈を制御します。
mysql> UPDATE t
SET blob_col=LOAD_FILE('/tmp/picture')
WHERE id=1;
このことから、あなたの場合は間違っている可能性のあることが複数あります...
Linuxでも同じ問題がありました...
select load_file('/tmp/data.blob');
+-----------------------------+
| load_file('/tmp/data.blob') |
+-----------------------------+
| NULL |
+-----------------------------+
ユーザーとグループの所有権が「mysql」に変更された後、最終的にファイルを正常にロードできました。
sudo chown mysql:mysql /tmp/data.blob
Windows を使用している場合は、フル パスでスラッシュをダブル エスケープします。
テストで見つけた警告をもう 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 インスタンスにアップロードし、クエリ ブラウザからそのパスを使用すれば、すべてうまくいきます。