【MySQL】LOAD DATA INFILEで文字化けを解消する方法

MySQL
スポンサーリンク

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';

この結果、もし latin1sjis など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; では解消しないケースも多く、根本的な解決にはサーバーのデフォルト文字セットを適切に設定することが必要です。インポート作業の前に設定を確認し、必要に応じて修正しておくことで、スムーズに作業を進められるようになります。

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

タイトルとURLをコピーしました