いやしかし、MySQL 5 に上げて、charset と collation がムズカシイ。
ALTER TABLE hoge CONVERT TO charset utf8
でうまくゆくかと思いきや、そうでもない。
各カラムの collation を定義して行ってもダメだ。
結局、MySQLのキャラクターセット(Ogawa::Memoranda) に書いてあった方法を取らざるを得なかった。
引用すると:
$ mysqldump -uUser -pPassword –compact –default-character-set=binary hageDb > hage.sql
$ sed ‘s/DEFAULT CHARSET=ujis/DEFAULT CHARSET=utf8/g’ hage.sql > hagehoge.sql
(フィールドにcharsetが付いている場合にはその分も変換すること)
(drop & create)
$ mysql -uUser -pPassword hageDb < hagehoge.sql
ここの最後の下りだけ、
$ mysql -uUser -pPassword --default-character-set=utf8 hageDb
にして、ようやくうまく行った。
この手順に入る前に試行錯誤していて、データをおかしくしてしまって、バックアップから戻したり、結構めんどうだったなぁ…。何時間も浪費してしまった 🙁 rz
ちなみに、手動でへんちくりんなことをしていなかったテーブルについては、実は、
/etc/mysql/conf.d/charset.cnf
を作成して、中に、
[mysqld]
default-character-set=utf8
と書くだけでうまく行った。本来、これだけでも良かったのかもしれないが…。
ちなみに、
skip-character-set-client-handshake
も入れてしまうと、ujis で作ってある Xoops 用のデータベースと Xoops の間がうまくゆかなくなって文字化けしてしまった。と、いうか…
そもそも、Xoops 2.0.16aJP を使っていて、Database の Charset を ujis にするとうまくゆかん..。上記と同じような事をずいぶん試したが、ダメ。ujis のままだとうまくゆく。なぜ???
orz orz orz