すがブロ

sugamasaoのhatenablogだよ

MySQLの文字コードにハマる

文字コードを設定するところはたくさんある

基本、これらは全部統一されていれば MySQL のコンバートに巻き込まれることは無いと思う。
だけど、今回ハマったのはDatabase を ascii にしてテーブルを utf8 で作成してしまったことが原因。
テーブルを DROP するのは惜しいので ALTER で文字コードを変えたんだけど、何回やっても何回やっても文字コードがなおらーないよー。何がいけない? 横着はやっぱりだめなの?*1
と、割と絶望感に打ちひしがれたんだけど、上のほうで書いたとおり、カラムにも文字コードは設定されているわけで、 Table に対して ALTER をかけてもカラムにまで ALTER の影響は無いので、ALTER TABLE する際には各カラムに対する変更も付けてあげなくちゃいけない。

ちなみに

テーブルやカラムの文字コードは以下の構文で確認できる。

show create table xxxx;

テーブルと各カラムで文字コードが違う場合はカラムの定義の行に文字コードの設定も表示される。逆に、同じだった場合は何も記載されず、一番最後の行にテーブルの文字コード設定が出ている(はず)。
あと、クライアントの文字コードと登録されているデータの文字コードが違うと、MySQL コマンドラインで実行した時に ??? になってしまうことがあるけど、その時は select 文など実行したいコマンドの前で

set names xxx; # xxx は utf8 等

のように明示的に使用する文字コードを指定するとうまくいくっぽい。

*1:エアーマンが倒せない(むしろ愛しの彼が振り向かないかな!)を脳内再生するが良いよ!