SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
技術者募集中

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

参考

http://dev.mysql.com/doc/refman/5.1/ja/load-data.html

関連するメモ

コメント