MariaDBでは、LOAD_FILE()
関数はファイルを読み取り、ファイルの内容を文字列として返します。
構文
構文は次のようになります:
LOAD_FILE(file_name)
file_name
の場所 ファイルへのフルパス名です。
例
pets.csv
というファイルがあるとします。 次のテキストが含まれています:
1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat"
LOAD_FILE()
を使用できます それらのコンテンツを読み取って返す関数:
SELECT LOAD_FILE('/Users/barney/data/pets.csv');
結果:
+---------------------------------------------+ | LOAD_FILE('/Users/barney/data/pets.csv') | +---------------------------------------------+ | 1,"Wag","Dog" 2,"Bark","Dog" 3,"Meow","Cat" | +---------------------------------------------+ 1 row in set (0.186 sec)
この場合、ファイルへのフルパスは/Users/barney/data/pets.csv
です。 。
間違ったファイルパスまたは権限
次の基準を満たさないファイルパスを指定すると、null
になります。 :
- ファイルはサーバーホスト上にある必要があり、ファイルへのフルパス名を指定する必要があり、
FILE
が必要です。 特権。 - ファイルはすべてのユーザーが読み取り可能である必要があり、
max_allowed_packet
のサイズ(バイト単位)未満である必要があります。 システム変数。 -
secure_file_priv
の場合 システム変数が空でないディレクトリ名に設定されている場合、ロードするファイルはそのディレクトリにある必要があります。
これら2つのシステム変数を確認する方法は次のとおりです。
SELECT
@@GLOBAL.secure_file_priv,
@@GLOBAL.max_allowed_packet;
結果:
+---------------------------+-----------------------------+ | @@GLOBAL.secure_file_priv | @@GLOBAL.max_allowed_packet | +---------------------------+-----------------------------+ | NULL | 16777216 | +---------------------------+-----------------------------+
私の場合、secure_file_priv
で指定されたディレクトリはありません システム変数、および私のmax_allowed_packet
変数はデフォルトに設定されています(前の例でアップロードしたファイルには十分すぎるほどです)。
ただし、存在しないファイルをアップロードしようとすると、次のようになります。
SELECT LOAD_FILE('pets.csv');
結果:
+-----------------------+ | LOAD_FILE('pets.csv') | +-----------------------+ | NULL | +-----------------------+ 1 row in set (0.000 sec)
この場合、ファイルへのフルパスを指定するのを忘れました。
マルチバイトファイル名
character_set_filesystem
システム変数は、リテラル文字列として指定されたファイル名の解釈を制御するために使用されます。 character_set_client
から文字列リテラルとして指定されたファイル名を変換するために使用されます character_set_filesystem
へ ファイルを開く前に。
デフォルトでは、character_set_filesystem
binary
に設定されています 、したがって変換は行われません。
この値は、次のコードを使用して確認できます。
SELECT @@GLOBAL.character_set_filesystem;
結果:
+-----------------------------------+ | @@GLOBAL.character_set_filesystem | +-----------------------------------+ | binary | +-----------------------------------+
ヌルファイルパス
null
を提供する ファイルパスはnull
になります :
SELECT LOAD_FILE(null);
結果:
+-----------------+ | LOAD_FILE(null) | +-----------------+ | NULL | +-----------------+ 1 row in set (0.000 sec)
ファイルパスがありません
ファイルパスを指定しないと、エラーが発生します:
SELECT LOAD_FILE();
結果:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'LOAD_FILE'