sql >> データベース >  >> RDS >> MariaDB

LOAD_FILE()がMariaDBでどのように機能するか

    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'


    1. Oracleで日付が属する四半期を確認する

    2. ループのないセットまたはシーケンスを生成する–パート3

    3. 動的クロス集計クエリを実行する

    4. MySQLでランクを計算する方法