住所データベース作成してたときのメモ - MySQL

MySQLで住所データベース作ってたんだけど

*丁目ってのを表示するときにorder by ***して

一丁目
二丁目
三丁目

とかって表示しようと思ったら

一丁目
三丁目
二丁目

ってなっちゃった・・・

なんで?って事で調べてみた

※テーブルはutf8_binで作成している

まずは16進数の確認


mysql> select '一' as '漢数字',hex('一') as '16進数' union select '二',hex('二') union select '三',hex('三');

漢数字 16進数
E4B880
E4BA8C
E4B889

3 rows in set (0.00 sec)

んん?

2バイト目が上からB8→BA→B8ってなってる・・・

何で並んでないんだ?

じゃあ【一】の次はなんだろ?


mysql> select 0xE4B881;

0xE4B881

1 row in set (0.00 sec)

mysql> select 0xE4B882;

0xE4B882

1 row in set (0.00 sec)

mysql> select 0xE4B883;

0xE4B883

1 row in set (0.00 sec)

ますますわからん・・・

じゃあ文字コード変えてcp932でも見てみる


mysql> SELECT hex(CONVERT('一' USING cp932));

hex(CONVERT('一' USING cp932))
88EA

1 row in set (0.00 sec)

mysql> SELECT hex(CONVERT('二' USING cp932));

hex(CONVERT('二' USING cp932))
93F1

1 row in set (0.00 sec)

mysql> SELECT hex(CONVERT('三' USING cp932));

hex(CONVERT('三' USING cp932))
8E4F

1 row in set (0.00 sec)

これも並んでないなぁ

・・・

もしかして!!

これって日本語のあいうえお順なんじゃない!?

[いち、に、さん、よん].sort() → [いち、さん、に、よん]

みたいな

一から十まで確認してみる


mysql> select * from (select '一' as '漢数字',hex('一') as '16進数' union select '二',hex('二') union select '三',hex('三') union select '四',hex('四') union select '五',hex('五') union select '六',hex('六') union select '七',hex('七') union select '八',hex('八') union select '九',hex('九') union select '十',hex('十')) as t order by 漢数字;

漢数字 16進数
E4B880
E4B883
E4B889
E4B99D
E4BA8C
E4BA94
E585AB
E585AD
E58D81
E59B9B

10 rows in set (0.00 sec)

んんん???

微妙だ・・・

[いち、なな、さん、きゅう、に、ご、はち、ろく、じゅう、よん]

って

もしかして読み方間違ってるとか?

あ〜、もうわからん