2006年11月06日

MySQL+utf8+ひらがなでソート

タイトルの条件であいうえお順でソートさせるにはどうやるのが一番良いんでしょうかねぇ・・・

そもそもそんな単純なことで悩まないといけない最大の原因は、MySQLのutf8のバイナリ照合指定で「utf8_japanese_ci」が存在しないため。

デフォルトではおそらくutf8_general_ciになっていますが、これが指定されている列にひらがなを格納してOrder byしても予定の結果は帰りません。

また、そもそもバイナリで普通にソートしてくれれば並ぶという話しも有るので、試しにutf8_binなどを指定して見ましたが、これも変な順序でしか並びません。

無論、utf8_unicode_ciなんかも試してみましたが、これもダメ。

で、いろいろと試行錯誤して結局次のようなOrder by指定で落ち着きました。

SELECT hoge FROM foo ORDER BY CAST(ひらがなを格納した列 AS CHAR)
毎回CASTされるというのはどうにも気持ち悪いですが、そう言う挙動を期待して他がいろいろとできあがっていたので、それを直すのに比べればと言うことで、仕方が無くガマンすることにしました。

それにしても、今回MySQLの5系を初めて使ってみましたが、日本語周りは弱いし、

みたいに商業化路線だし、そもそも日本語が通りそうな万能な管理ツールがないしで、日本人向けシステムに今からあえて選択する理由が見つからない感じです。

これまでフリーのDBの最大の弱点だった、日本語全文検索も

でカバーされるようになりましたし、今度、新たに何か起こすときはPostgreだなぁと心に誓う今日この頃です。

Posted by Takuchan at 2006年11月06日 23:58 | トラックバック(0)