- 締切済み
mysqlで50音順にorder byしたい。
ひらがなの氏名のはいった列(kana)を mysql> select kana from personal order by kana; としますが、あいうえお順にならびません。 mysql> select kana from personal order by binary kana; とするとちゃんと並びますが。。 [あ行][か行]とクエリーをしたいので下記のようなSQLを PHPに入れています。 SELECT * FROM personal WHERE kana between 'あ%' and 'お%' or kana = 'お%' ORDER BY binary kana asc しかしながら、この場合は、もともと あいうえお順にならんで ないので [ら行]とか検索できません。 なにか方法は 無いでしょうか?? 文字コード自体をbinaryにしようと思い 下記のとおりしましたが、 # cat my.cnf [mysqld] default-character-set = binary character-set-server= binary language=/usr/share/mysql/japanese [mysql.server] default-character-set = binary ------------------------------------------- 確認すると mysql> \set Server characterset: binary Db characterset: latin1 Client characterset: binary Conn. characterset: binary になっています。 併せて [Db characterset]の変更方法も教えてください
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
MySQLのバージョンは何ですか? OSは何ですか? 日本語を扱うのに、日本語を扱える文字コードにしない理由は、何かあるのですか? >SELECT * FROM personal WHERE kana between 'あ%' and 'お%' or kana = 'お%' ORDER BY binary kana asc betweenで前方一致は使えません。 likeをorで並べたり、substrを使ったりといった方法になると思います。ただし、substr等を使い列を加工すると、MySQLはインデクスを使ってくれません。 SELECT * FROM personal WHERE substr(kana,1,1) between 'あ' and 'お' ORDER BY binary kana asc
- yambejp
- ベストアンサー率51% (3827/7415)
>[あ行][か行]とクエリーをしたい あ行とか行を検索するのですか? SELECT * FROM personal WHERE 1 and kana like 'あ%' or kana like 'い%' or kana like 'う%' or kana like 'え%' or kana like 'お%' or kana like 'か%' or kana like 'き%' or kana like 'く%' or kana like 'け%' or kana like 'こ%' ORDER BY binary kana asc とかでどうでしょ? 先頭一致なら正規表現でもいけるかも SELECT * FROM personal WHERE 1 and kana regexp '^あ|^い|^う|^え|^お|^か|^き|^く|^け|^こ' ORDER BY binary kana asc いちおう正規表現は完全には日本語に対応してないみたいです。 それとkana regexp '^[あ-こ]'なんてやり方はだめみたいですね。 もちろん、「ぁぃぅぇぉ」や「がぎぐげご」などをどう見るかによっても 処理がかわってきます
補足
MySQLのバージョンは何ですか? 4.1です OSは何ですか? RedHadLinux ES 4.0です。 下記のとおりで うまくいきました。 SELECT * FROM personal WHERE binary kana between 'あ%' and 'お%' or binary kana like 'お%' ORDER BY binary kana asc