MySQL3.2で、次のSQLを実行すると、氏名よみがなのあいうえお順にならず、とても変な順番になります。

これはどういうわけでしょうか。また、ふつうのよみがな(五十音順)にするためにはどうしたらいいのでしょうか。
もちろん、last_name_kana, first_name_kanaの両欄にはちゃんとよみがなが入力されています。

SELECT emp_cd,CONCAT(last_name_j,first_name_j) AS name FROM employee ORDER BY last_name_kana, first_name_kana;

結果見本(手でかな欄を加えています)
emp_cd name かな
------------------------
n*** 難羽○○ なんば
a*** 中山○○ なかやま
n*** 横山○○ よこやま
c*** 原山○○ はらやま
i*** 飯山○○ いいやま
7*** 上山○○ うえやま
o*** 岡山○○ おかやま
………
s*** 傍山○○  そばやま
t*** 田山○○  たやま
t*** 田内○○ たのうち
t*** 高山○○ たかやま
p*** 畠山○○ はたやま
m*** 前山○○  まえやま
-------------------------

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/07/21 16:30:20
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:kn1967 No.1

回答回数2915ベストアンサー獲得回数301

ポイント30pt

優先順位を逆にしてみてください。

ORDER BY last_name_kana, first_name_kana

名前、苗字の順にソート

  ↓

ORDER BY first_name_kana, last_name_kana

苗字、名前の順にソート


URL必須って事なのでチュートリアルの並び替え

MySQL AB :: MySQL 4.1 リファレンスマニュアル :: 3.3.4.4 レコードのソート

id:mouitchou

やってみましたが、やはり外れでした。

2007/07/18 23:04:42
id:Yota No.2

回答回数453ベストアンサー獲得回数28

ポイント30pt

mysql>SHOW VARIABLES LIKE 'character_set' ;

でINSERTしてある文字エンコーディングとデータベースのエンコーディングがあっているか確認してください。

たとえばこの結果がlatin1ならば、2バイト文字をソートすることはできません。

その場合は設定ファイルに下のように書き加えて、もう一度確認してください。(Shift_JISの場合)

[mysqld]

default-character-set=sjis

http://dummy.com/

id:mouitchou

やはりソート不能ですか。MySQLの設定ファイルを触ることはできないレンタルサーバです。

2007/07/20 00:27:46
id:b-wind No.3

回答回数3344ベストアンサー獲得回数440

ポイント20pt

mysql:7702

サーバーの設定をいじれない場合は対応できないので、

ソート用のカラムを別途用意するしかないかと。

id:mouitchou

どうやら残念ながらそのようですね。有り難うございました。

2007/07/21 16:28:41
  • id:kn1967
    思ったようなソートが出来ていないのはキャラクタセットの指定等によるものですから、私の一つ目の回答は大間違いのこんこんきち野郎です。
    開かないでいただけますようお願いいたします。
  • id:mouitchou
    開けてしまいました(^^;

    想像してはいましたが、やはりキャラクタセットの問題ですか。それにしてもかな配列順が正しいものと全然違うとは困りました。
  • id:kn1967
    その後、調べてみた所、おかしな配列になってしまっているのは
    「先頭の1bitを無視して7bitで文字列を判断しているから」だと思われます。
    そこまでは調べたのですが、バージョン上げて、さらにUTF-8に統一とかすれば・・・
    ってのは別の話とすれば、これに対する決定的な解決方法は無いようです。

    半角英数を使ったローマ字表記のフィールドを追加して
    ローマ字表記でソートなさるのが一番早い解決方法かもしれません。
  • id:mouitchou
    こちらでも
    http://dev.mysql.com/doc/refman/5.1/ja/character-sets.html
    あたりを読みあさっていましたが、MySQL起動時に設定する話はあっても、接続時にどうこうというものがなく、行き詰まっていました。
    たしかにローマ字表記がいちばん早そうです。
    もう少し、他の方の回答をお待ちしてみて、なければ質問を閉じることにします。
    こんな場合、コメントにはポイントをつけらないようですので、ローマ字で……という回答を入れていただきましたらポイントを差し上げたいと思います。よろしくお願いします。
  • id:kn1967
    時間的な物もありますので少なくとも土曜日の朝くらいまでは閉じずに待っておかれたほうがよろしいかもしれません。

    ポイントにつきましては別段不要です。
    (本回答は間違った内容ですしコメント欄は妥協案を提供しただけなので・・・
    新たな投稿をしますと、それだけで所要ポイントが増してしまうということもありますし・・・)

    以上、とりあえず・・・
  • id:chuken_kenkou
    MySQLのバージョンは、3.2で間違いないですか?

    MySQL 4.1でunicode等、文字コードの大幅な拡張が行なわれています。

    MySQLのコマンドが入力可能な状態で、

    status

    と入力したり、
    SQLが入力可能な状態で、

    show variables like 'char%'

    と入力すると、有効になっている文字コードを表示できます。
    MySQL 3.2だと、このコマンド自体が未サポートかも知れませんが。
  • id:mouitchou
    kn1967さん、そうですね。しばらく待ちます。ご助言感謝します。

    chuken_kenkouさん、ご指摘有り難うございます。
    3.23.58-16.RHEL3.1 です。4.1なら良かったのですが。

    実行結果は、以下のようになります。
    -----------------------------------------
    Variable_name Value
    character_set latin1
    character_sets latin1 big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin2 latin5 swe7 usa7 win1250 win1251 win1251ukr ujis sjis tis620
    -----------------------------------------

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません