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

MySQLでのLOAD_FILE()関数のしくみ

    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 / からのみファイルを読み取ることができます ディレクトリ。


    1. PHPとMySQLデータベースを使用したToDoリストアプリケーション

    2. DjangoアプリをAWSElasticBeanstalkにデプロイする

    3. SQLクエリでOracle連想配列を使用する方法

    4. MySQLのINDEX、PRIMARY、UNIQUE、FULLTEXTの違いは?