2008/09/12

2008-09-12:MySQL の default character set

とある、バックエンドデータベースに MySQL を使っているアプリを評価してて、はじめは test といったシングルバイト文字列でやっていたのだけど、ふと気づいて「てすと」と入れたら、見事に文字化け。
なんだろう、と思いながら、ソースを読みつつ、mysql でデータベースに接続して show create table <テーブル名>; してみたら、テーブルの DEFAULT CHARSET が latin1 だった。
「あー、これかぁ」と、alter table 文で変更をかける。

ALTER TABLE <テーブル名> default charset utf8;

が、まだだめ。文字化ける。
いくつか試行錯誤したあと、よくよく show create table の出力をよく見ると、

カラム単位に「character set latin1」が設定されてる

ことを発見。
MySQL はテーブル単位どころか、カラム単位でデフォルト文字コードが設定されるのか。すごいというか、なるほど、MySQL っぽい。見事なモジュラリティ?

というわけで、カラムごとにちまちま alter table をかけていく修行に。

ALTER TABLE <テーブル名> modify <カラム名> <データタイプ> charset utf8;

これ、システムカタログテーブルとかをどかっと update かけれたりしそうかなと予想するが、いかんせん MySQL の中身がよく分からず、今回は愛と勇気・努力と根性で乗り切る。

いいかげん、そろそろまじめに MySQL を勉強しよう。