【MySQL】LOAD DATA INFILE するときのファイルの文字コード
問題
LOAD DATA INFILE すると、文字化けした。
ファイルの文字コード変えないとだめ?文字コード何にしたらいい?
答え
MySQLのLOAD DATA INFILEでは、character_set_databaseシステム変数の文字セットを使う。
UTF-8のファイルが正しく読み込めたとしたら、それはcharacter_set_databaseがutf8だったのだろう。
Shift_JISのファイルを読み込みたかったら、SET character_set_database=sjis;
を設定すればよい。
SET NAMES SJIS;
などは影響しない。
例) 郵政公社の郵便番号CSV(Shift_JIS)をそのまま取り込むSQL。
#これでShift_JISのファイルが取り込める set character_set_database=sjis; #KEN_ALL.CSVは郵政公社から取ってきたファイルで文字コードはわざわざ変換したりしていない load data infile "/tmp/KEN_ALL.CSV" into table test.postaldata FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '' LINES STARTING BY '' TERMINATED BY '\r\n' IGNORE 0 LINES (c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15);
追記
sjis指定では「はしご高(髙)」などの環境依存文字が化ける。
その時は SET character_set_database=cp932; するとよい。
MySQLの言うsjisは標準的なShift_JISで、WindowsのShift_JISはCP932。
対応している文字コードは以下で確認できる。
SHOW CHARACTER SET;
コメント