46705


以下の様なデータがtable:user入っていて  
[name]  
123456  
１２３４５６  
23456  
２３４５６

SELECT * FROM user ORDER BY name COLLATE utf8_unicode_ci ASC;  
とした時に、  
123456  
１２３４５６  
２３４５６  
23456

になってしまいます。

こうなってしまう理由と、  
以下の様にするには、どの様な方法がありますでしょうか。。

123456  
１２３４５６  
23456  
２３４５６

ご存知の方、教えて頂けたら幸いです。


CC BY-SA 4.0
2018-07-18T12:17:17.280
46701
2018-07-18T14:44:01.007
29363
question
mysql
MySQL utf8_unicode_ci 利用時のソート順


utf8_unicode_ci では半角数字と全角数字が等しいと解釈されるためです。

[code]

    mysql> SET NAMES utf8 COLLATE utf8_unicode_ci;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> SELECT '１２３'='123';
    +-------------------+
    | '１２３'='123'    |
    +-------------------+
    |                 1 |
    +-------------------+
    
[/code]

'23456' と '２３４５６' は等しいので順番は不定です。

たとえば utf8_unicode_ci で等しい場合に、さらに utf8_bin でソートすれば、順番を固定化できます。

[code]

    mysql> SELECT * FROM user ORDER BY name COLLATE utf8_unicode_ci ASC, name COLLATE utf8_bin;
    +--------------------+
    | name               |
    +--------------------+
    | 123456             |
    | １２３４５６       |
    | 23456              |
    | ２３４５６         |
    +--------------------+
    
[/code]


CC BY-SA 4.0
2018-07-18T14:44:01.007
46705
2018-07-18T14:44:01.007
3249
46701
answer