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