住所データベース作成してたときのメモ - 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)
んんん???
微妙だ・・・
[いち、なな、さん、きゅう、に、ご、はち、ろく、じゅう、よん]
って
もしかして読み方間違ってるとか?
あ〜、もうわからん