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]

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

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

シェアする

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

フォローする

スポンサーリンク
スポンサー広告
トップへ戻る

ゆうそうとについての説明

ゆうそうと とは東京都八王子市を中心として、WordPressによるWEBサイトの作成や、スポットでのIT相談を行ったり、年間契約でのIT顧問をなりわいとして活動しています。

特徴としては30年以上IT業界でプログラムを中心として仕事をしてきたものと、美大出身のデザイナーがワンストップで対応するため、幅広い対応が可能であることです。

IT相談は直接お会いしてのご相談の他、ZOOMによるオンライン相談も可能です。