MySQLのテーブルの照合順序をUTF-8にする

Last edited on 2009/07/25 (土) - 0:00

コンテンツを作成するときに、英語、日本語以外の文字コードが保存されず、'?' になってしまうことに気がついた。たとえば、ṃ なんていう文字がそうだ。MySQLの文字コードはUTF-8のはずなのにおかしいな、と思って調べてみた。

結論からいうと、node_revisions というテーブルのbodyフィールドの照合順序を utf8_general_ci にすることによって正しく保存されるようになった。body フィールドの照合順序が ujis_japanese_ci になっていたのがまずかった。

照合順序の変更は、MySQLの管理ツール phpmyadmin2 を使って行った。node_revisions テーブルを選択し、構造タブから bodyフィールドの編集へと進み、照合順序を変更して保存すればよい。bodyだけでなく titleフィールド, teaserフィールドも変更しておくとよい。

文字コードセットと照合順序についての詳細は、以下のページに書かれている。

http://dev.mysql.com/doc/refman/5.1/ja/charset.html

照合順序を設定するとそれに応じて、文字コードが設定されるらしい。

照合順序と文字コードの設定は、サーバ、データベース、テーブル、カラムとそれぞれのレベルで設定できる。今回は、MySQL4.0から移行したときに、既存のテーブル、カラムの照合順序が ujis_japanses_ci のままになっていたようだ。