Bug #65899 | "order by" clause returns wrong order result data (BIG5 COLLATE big5_chinese_ci) | ||
---|---|---|---|
Submitted: | 14 Jul 2012 15:19 | Modified: | 18 Jul 2012 5:22 |
Reporter: | Michael Lee | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Charsets | Severity: | S2 (Serious) |
Version: | 5.x, 5.5.26 | OS: | Any |
Assigned to: | CPU Architecture: | Any | |
Tags: | BIG5, big5_chinese_ci, order by, sorting |
[14 Jul 2012 15:19]
Michael Lee
[14 Jul 2012 15:52]
Valeriy Kravchuk
Thank you for the problem report. Verified with 5.5.26 on Mac OS X: macbook-pro:5.5 openxs$ bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.5.26-debug Source distribution Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> CREATE TABLE `test_sort` ( -> `id` INT NOT NULL, -> `p_grp` VARCHAR( 30 ) CHARACTER SET big5 COLLATE big5_chinese_ci NOT NULL default '', -> PRIMARY KEY (id) -> ) ENGINE = InnoDB DEFAULT CHARSET=big5; Query OK, 0 rows affected (0.86 sec) mysql> mysql> insert into test_sort (id,p_grp) values -> (1,'上午好'), -> (2,'下午好'), -> (3,'上午好'), -> (4,'下午好'), -> (5,'上午好'), -> (6,'下午好'); Query OK, 6 rows affected (1.86 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql> mysql> select * from test_sort order by p_grp; +----+-----------+ | id | p_grp | +----+-----------+ | 1 | 上午好 | | 2 | 下午好 | | 3 | 上午好 | | 4 | 下午好 | | 5 | 上午好 | | 6 | 下午好 | +----+-----------+ 6 rows in set (0.12 sec) mysql> explain select * from test_sort order by p_grp;+----+-------------+-----------+------+---------------+------+---------+------+------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+------+----------------+ | 1 | SIMPLE | test_sort | ALL | NULL | NULL | NULL | NULL | 6 | Using filesort | +----+-------------+-----------+------+---------------+------+---------+------+------+----------------+ 1 row in set (0.04 sec)
[17 Jul 2012 13:44]
Arnaud Adant
>However, there is no workaround if I don't change the charset. You can still use this query as a workaround : select * from test_sort order by p_grp collate big5_bin;
[18 Jul 2012 5:22]
Michael Lee
The statement "select * from test_sort order by p_grp collate big5_bin" only works for pure Chinese characters(the example data). I need the collate "big5_chinese_ci" to get case insensitive result. Anyway, thanks for your suggestion.