プロが教えるわが家の防犯対策術!

ひらがなの氏名のはいった列(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]の変更方法も教えてください

A 回答 (2件)

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

この回答への補足

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

補足日時:2007/06/22 06:06
    • good
    • 0

>[あ行][か行]とクエリーをしたい



あ行とか行を検索するのですか?
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 '^[あ-こ]'なんてやり方はだめみたいですね。

もちろん、「ぁぃぅぇぉ」や「がぎぐげご」などをどう見るかによっても
処理がかわってきます
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す