ExcelはShift-JISで動いているので、全ての文字コードをShift-JISに合わせる必要がある。
1.MySQL サーバ側 カラム
SHOW CREATE TABLEでカラムに邪魔なcharacter setがないこと。
`category` varchar(25) DEFAULT NULL,
のようになっていることが望ましい。
`category` varchar(25) CHARACTER SET utf8 DEFAULT NULL,
だとUTF8が設定されてしまっているので良くない。これを消すには
ALTER TABLE table1 MODIFY `category` varchar(255);
などとする。
また、日本語を含まないカラムでlatin1といった文字コードになっていることがある。
SHOW CREATE TABLE table1;
CREATE TABLE `table1` (
…
`column1` varchar(5) CHARACTER SET latin1 DEFAULT NULL,
`column2` varchar(5) CHARACTER SET latin1 DEFAULT NULL,
のようにsjisと混在している状況です。こちらもCHARACTER SET設定をなくすか、sjisに統一しておく必要がある。そうしないとExcelから修正してCommit時に
MySQL Error 1267:
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (sjis_japanese_ci,IMPLICIT) for operation ‘=’Deleted 0, Inserted 0, Updated 0 row(s).
といったエラーが出てしまう。
2.MySQL サーバ側 テーブル
SHOW CREATE TABLEでテーブルのcharsetがsjisになっていること。
DEFAULT CHARSET=sjis
のように表示されることが望ましい。これを変えるには
ALTER TABLE table1 DEFAULT CHARSET sjis;
とする。
3.読み込み元データ
csvデータをインポートする場合には、読み込み設定も変更する必要がある。
SET character_set_database=sjis;
としてから、下記のように読み込む。
LOAD DATA LOCAL INFILE ‘data.csv’ INTO TABLE table1 FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”‘;
Puttyでも正しく表示するには
SSH端末から入りMySQLクライアントとしてログインし、テーブル内容を正しく表示するには。
1.Putty設定で、ウィンドウ→変換 をShift-JISにする
2.シェルの文字コード
echo $LANG
ja_JP.sjis
こうなるために、
export LANG=ja_JP.sjis
しておく。
~/.bashrc の末尾に追記しておくのも良い。
3.MySQLログイン後の変数設定
mysql> SET character_set_results = ‘SJIS’;
のようにする。
補注
sjisではなくcp932にした方が良いという話もある。私の環境ではsjisで動いているため、今回はそのままにしておく。