はじめに
MySQL(厳密にはMariaDB)で、日本語を含むCSVファイルをインポートしたが、
select文でそれを表示させたところ、日本語部分が文字化けしてしまった。
不具合の詳細と、解決に向けて試したこと、解決策について備忘録も兼ねて記す。
環境
- XAMPP
- MariaDB
- コマンドプロンプト
(バージョンなどは後述のように再インストールしたため不明。)
発生した不具合
A106,中村,26
A107,田中,24
A108,鈴木,23
A109,村井,25
A110,吉田,27
というファイルをMariaDBで読み込んだ。
load data infile "db1\\tb2.csv" into table tb2 fields terminated by ",";
因みに、書き込むテーブルのカラムは以下。
bang varchar(10)
nama varchar(10)
tosi int
出力結果とエラー文
+------+--------+------+
| bang | nama | tosi |
+------+--------+------+
| A106 | 荳ュ譚・| 26 |
| A107 | 逕ー荳ュ | 24 |
| A108 | 驤エ譛ィ | 23 |
| A109 | 譚台コ・| 25 |
| A110 | 蜷臥伐 | 27 |
+------+--------+------+
試したこと
再起動
XAMPP Control Panelの対応する箇所を再起動した。
具体的にはMySQLの行のStopボタンをクリック。
CSVファイルの文字コードを確認・書き換え
サクラエディタを使ってShift-JISやUTF-8に変更して保存し直し、インポートし直した。
データベースの設定を確認・書き換え
show variables like "chara%";
このコマンドを用いて、データベースに設定されているコマンドを確認した。
ここではVariable_nameがcharacter_set_databaseである項目のValueについて確認。
その後、
SET character_set_database=utf8
を使ってcharacter_set_databaseをUTF-8に書き換えた。
また"utf8"部分をcp932(=Shift JISに対応)にも書き換え、
それぞれに合わせてCSVファイルの文字コードもUTF-8やShift-JISに変更してみた。
my.iniファイルの書き換え
MariaDB上の、初期の文字コードを設定するものであるようだ。
ここなどを参照。
XAMPPを再インストール
ファイルが壊れた、バージョンが古いなどの原因かどうかを確かめる意図。
再インストール前のバージョンなどはメモし忘れた。
解決につながった方法
色々と試しすぎて、この方法のみによって解決したかと言われると確約はできないのだが
結論からいうと、不具合の原因はMySQL側ではなく、コンソール側に存在していたようだ。
MariaDBでファイルをインポートしたはいいものの、その文字コードをコマンドプロンプト上で取り扱うにあたって、
それがコマンドプロンプトで設定されている文字コードとは異なっていたため、文字化けが発生していた、という可能性がある。
解決に当たってCSVファイルの文字コードを散々変更して試しているので、
コマンドプロンプト上の設定文字コードとCSVファイルの文字コードが一致するパターンがあっても不思議ではない。
それならばもっと早い段階で問題が解決していてもおかしくはないはず。
従って、これだけが原因だったのかと言われると疑問が残る。
とはいえ、以下の方法で解決した。
コンソール(コマンドプロンプト)の文字出力に使用されている文字コードを変更する。
コンソール上で以下のコードを打ち込んだ。(数字65001はUTF-8に対応している)
chcp 65001