LOAD_FILE関数(アップロードしたファイルを読み込んでその内容を文字列として取得する)

MySQL で LOAD_FILE 関数を使用するとサーバーにアップロードしたファイルを読み込み、その内容を文字列として取得することができます。ここでは MySQL における LOAD_FILE 関数の使い方について解説します。

(Last modified: )

LOAD_FILE関数の使い方

LOAD_FILE 関数はサーバーにアップロードしたファイルを読み込み、その内容を文字列として取得することができます。書式は次の通りです。

LOAD_FILE(file_name)

引数にはサーバー上にアップロードしたファイルをフルパスで指定します。ファイルは読み取り可能になっている必要があり、サイズは max_allowed_packet で設定されているバイト数以下である必要があります。また secure_file_priv にディレクトリが設定されている場合はファイルはそのんディレクトリにアップロードする必要があります。

-- --

最初に max_allowed_packet を確認します。次のように実行してください。

show variables like 'max_allowed_packet';

MySQL/load_file 関数の使い方(1)

現在は 4194304 (=4M) に設定されていました。この値の設定は my.ini ファイルで行われており、ファイルを見てみると次のように記述されています。

[mysqld]

# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=4M

サイズを変更する場合は my.ini の値を変更し、 MySQL を再起動してください。今回は 8M に変更してみました。

[mysqld]

# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=8M

MySQL を再起動したあとであらためて max_allowed_packet の値を確認してみると 8388608 (=8M) に変更されていました。

MySQL/load_file 関数の使い方(2)

次に secure_file_priv を確認します。次のように実行してください。

show variables like 'secure_file_priv';

MySQL/load_file 関数の使い方(3)

自分の環境ではデフォルト値はデータディレクトリとして設定されているディレクトリの中の Uploads ディレクトリが設定されていました。

上記ディレクトリに blog.txt というファイルをアップロードしました。

MySQL/load_file 関数の使い方(4)

アップロードしたファイルの内容は次のようになっています。

MySQL/load_file 関数の使い方(5)

-- --

それでは実際に試してみます。次のようなテーブルを作成しました。

create table blog(id int, blog text);

MySQL/load_file 関数の使い方(6)

アップロードしたファイルを読み込んで文字列として取得し、テーブルに格納します。

insert into blog values(1, load_file('/ProgramData/MySQL/MySQL Server 8.0/Uploads/blog.txt'));

MySQL/load_file 関数の使い方(7)

確認のためにテーブルのデータを取得してみます。

select * from blog\G

MySQL/load_file 関数の使い方(8)

アップロードしたファイルを読み込み、テーブルに格納できていることが確認できました。

-- --

load_file 関数の使い方について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。