MySQLやPHPのカタカナのUTF-8のソート順をカスタマイズした

Image [6]

先日、カタカナのソート順について要望をうけました。よく分かっていないのですが、通常は「アアト」よりも「アート」の方が先に表示される感じ、らしいのです。しかしMySQLでもPHPでも文字コードがUTF-8だと「アート」の方が後になってしまいます。そんなとき、「アート」が先に来るような方法について書きます。

ソートはどの順番で行われているのか

文字コードっていうのはコンピュータが理解できる形での文字をバイトで表現しているもの、です。日本語だとローカルではShift-JISがよく使われていますが、WebサイトではEUC-JPやUTF-8が主に使われてます。特に最近ではUTF-8という文字コードを使うことが主流となっています。

ソート順を考えるときにその UTF-8 での文字コードがどのように並んでいるのか一覧表をググって見つけてみました。

UTF-8コード表(1) – 弘前学院聖愛中学高等学校

こちらの文字コード表が見やすかったのでこちらを参照させていただきました。

Image

これを見るとカタカナだと  と  の順番は  の方が後になっています。ですのでソートをすると、アア より アー の方が順番として後になってしまいます。

MySQLとPHPでデフォルトのソートはどうなっているか

具体的にMySQLで

Image [2]

このようなテーブルがあったとして、

SELECT * FROM testkana ORDER BY kana

と kana の昇順に並べ替えてみます

Image [3]

結果はこのように アアト の方が、 アート よりも先に表示されてしまいます。

PHPでは

このように配列を作ってソートして表示してみると、

このような結果になります。やはり、MySQLと同じような順番になっています。

MySQLの対応方法

さきほどの文字コード表を見ると  はカタカナ全部の最後の方のコードとなっのテーブルの項目kanaはすべて全角カタカナではいっているとします。ということは  を カタカナ全てよりも小さいコードを持つ文字に置き換えて、それをソートすれば大丈夫そうです。

Image [1]

この表を見ると分かるのですが、カタカナ全部より前に ひらがな のコードがあるようです。そこで、  を  に置き換えた状態でソートすれば大丈夫そうです。

このコードを実行します。これは kanaの中にある ー を あ に置き換えた状態で昇順にソートする命令です。

これを実行してみると、

Image [4]

このように アート が アアト より先に来て、思ったようにソートすることができました。

PHPの対応方法

ちょっとですねー、冗長な方法しか思いつきませんでした(もっといい方法あるよ!という場合教えてくださいm(_ _)m)

さっきのコードをこのようにしてみました。

内容は  $kanaArraySortという配列に $kanaArray から1項目ずつコピーしていきます。その際に ー を あ に置き換えます。
そして、$kanaArraySortという配列を asort します。

結果は

このように意図したとおりにソートされました。

まとめ:UTF-8のコード表をじっくり見て考えましょう

今回は全てがカタカナの場合の対応でした。もしも全てがひらがなだったら、

Image [5]

このへんの記号を使いますかね。気をつけたいのは置き換える文字は「その項目で絶対に使っていない文字にする」ということです。

案外簡単だったので、ソートに困ったらおためしください(^^)/

兎本美佳

ブログを見た人がそのままできたらいいなと思って、できるだけ丁寧に書いています。blogに書いたようなネタの有償対応のご相談は「ゆうそうと」へいただければと思います(^^)/
無償での対応をご希望の場合は、コメントをいただけましたら可能な場合はコメントを返させていただきます。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサー広告
ブログをメールで購読

メールアドレスを記入して購読すれば、更新をメールで受信できます。

259人の購読者に加わりましょう

トップへ戻る