MySQLでは、LOAD_FILE()
関数はファイルを読み取り、その内容を文字列として返します。
構文
構文は次のようになります:
LOAD_FILE(file_name)
file_name
の場所 ファイルへのフルパスです。
例
ファイルからコンテンツを選択する例を次に示します。
SELECT LOAD_FILE('/data/test.txt') AS Result;
結果:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
データベースの例
ファイルの内容をデータベースに挿入したときのクエリの例を次に示します。
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
この場合、列MyBlobColumn
データ型がBLOB(バイナリデータを格納できるようにする)です。
これでデータベースに追加されたので、選択できます:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
結果:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
ファイルが存在しない場合
ファイルが存在しない場合は、 NULL 返されます:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
結果:
+--------+ | Result | +--------+ | NULL | +--------+
NULLになる可能性のあるその他の理由
NULL も取得します 次の条件のいずれかが満たされていません:
- ファイルはサーバーホスト上にある必要があります。
-
FILE
が必要です ファイルを読み取るための特権。FILE
を持っているユーザー 特権は、サーバーホスト上の任意のファイルを読み取ることができます。これらのファイルは、誰でも読み取り可能であるか、MySQLサーバーで読み取り可能です。 - ファイルはすべての人が読み取れる必要があり、そのサイズは
max_allowed_packet
未満である必要があります バイト。これを確認する方法は次のとおりです。SHOW VARIABLES LIKE 'max_allowed_packet';
私の結果:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
-
secure_file_priv
の場合 システム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。次のことを確認する方法は次のとおりです。SHOW VARIABLES LIKE 'secure_file_priv';
私の結果:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
この例では、 / data / からのみファイルを読み取ることができます ディレクトリ。