MySQLで LOAD DATA INFILE
を使ってファイルからデータを読み込もうとしたとき、意図せず文字化けに悩んだことはありませんか?
特に環境移行や設定変更後には、よくあるトラブルです。
本記事では、文字化けの原因とその解決策を、初心者にもわかりやすく解説します。具体的には、SET NAMES UTF8;
を追加してもうまくいかない場合がある理由と、character_set_database
による文字セット設定変更の重要性をステップごとに紹介します。
この記事を読めば、MySQLで文字化けに迷わず対応できるようになります!

LOAD DATA INFILE を使ったインポート時の文字化けは、サーバ側の文字セット設定に原因があることが多いです。焦らず一つずつ確認しましょう

SET NAMES UTF8; を書いても直らないし、なんでだろう…もしかして環境のどこかがおかしいのかな?
LOAD DATA INFILEで文字化けする原因
MySQLでLOAD DATA INFILEを使ってCSVやTSVファイルをインポートする際、文字化けが発生することがあります。特に、サーバーの環境や設定が変わった直後によく見られます。
典型的なケースとして、クライアント側で「SET NAMES UTF8;」を指定しても、文字化けが解消されないというものがあります。
この場合、原因はクライアント側ではなく、サーバー側の文字セット設定にあることが多いのです。
そもそも、LOAD DATA INFILEは単純に「今の接続設定の文字コード」を使って読み込むわけではありません。実は、デフォルトで「character_set_database」というサーバー側の設定を参照します。
つまり、この値がUTF8以外になっていると、ファイルを正しく読み込めず、結果的に文字化けしてしまうのです。
LOAD DATA INFILEで文字化けする場合の対応方法
では、どのように確認・修正すれば良いのでしょうか。まずは、現在の設定を調べるところから始めます。MySQLにログインし、次のコマンドを実行してください。
SHOW VARIABLES LIKE 'character_set_database';
この結果、もし latin1
や sjis
などUTF8以外の文字セットが表示された場合、それが原因である可能性が高いです。この場合は、次のように文字セットをUTF8に変更します。
SET character_set_database = 'utf8';
この設定を行った上で再度LOAD DATA INFILEを実行すると、文字化けが解消されるはずです。
補足として、「SET NAMES UTF8;」とは、クライアントとサーバー間の通信で使う文字セットを指定するコマンドです。これはあくまで接続時のやり取りに関する指定であり、LOAD DATA INFILEの内部処理で参照される文字セットは別物です。そのため、通信側の設定だけでは不十分で、サーバーの内部設定を適切に揃えることが重要になります。
もしphpMyAdminを使っている場合は、管理画面から対象データベースを選び、デフォルト文字セットをUTF8に変更することも可能です。GUIからの操作に慣れている方はこちらの方法が簡単かもしれません。
このように、文字化けの原因は単なる「UTF8にしていない」という単純な話ではなく、MySQLの内部設定の仕組みを理解することがポイントです。特にLOAD DATA INFILEはサーバーの設定に強く依存するため、事前に確認を行う習慣をつけておくと良いでしょう。
まとめ
LOAD DATA INFILEでの文字化けは、ほとんどの場合サーバー側の文字セット設定「character_set_database」が原因です。
SET NAMES UTF8; では解消しないケースも多く、根本的な解決にはサーバーのデフォルト文字セットを適切に設定することが必要です。インポート作業の前に設定を確認し、必要に応じて修正しておくことで、スムーズに作業を進められるようになります。

原因を理解すれば、文字化けは怖くありません。焦らず環境を整えて、確実にデータを取り込みましょう。