mysql を使っていて、db 自体は utf8 なのだが、dbのネタとして提供される csv が sjis で、こいつをインポートする必要が出てきた。
ほかには迷惑をかけず load するファイルの文字コードを指定するには、このセッション限り有効な文字コード指定をすればいい。 set character_set_database=…
だ。こいつで sjis 指定すればいい。
set character_set_database=sjis;
load data infile "/tmp/filename.csv"
into table db.example
…
…
こんな感じで csv ファイルを読み込んだら、ほとんど問題なく取り込めたのだけど、数文字だけ取り込めないってことが起きた。何文字かだけ 「?」 になってしまうのだ。
load コマンド終了後に warning が数件あるぞと表示され、show warning で確かにいくつかの文字の認識に失敗している。
そう、sjis で表現される範囲は何気に狭いのだ。こういうときは cp932 と指定するのが良い。
set character_set_database=cp932;
load data infile "/tmp/filename.csv"
into table db.example
…
…
これで無事いくつかの文字が 「?」 になってしまうのを回避できた。