MySQL按中文拼音排序

这篇文章主要是讨论一下,MySQL对中文的排序,
按照我们日常用法,按中文排序就是按中文对应的拼音排序

但往往结果不是我们想要的,下面让我们去解决这个问题

测试表:

ID name
1 张三
2 李四
3 王五

下面分别创建两个不同编码的表:

# test表  ( utf8 编码 )
mysql> create table test (                                                                
    -> ID int unsigned auto_increment primary key,
    -> name varchar(100)) charset=utf8;
Query OK, 0 rows affected (0.01 sec)
mysql> insert into test (name) values ('张三'),('李四'),('王五');
Query OK, 3 rows affected (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
# 查询结果:但结果显然不是自己想要的。
mysql> select * from test order by name asc;
+----+--------+
| ID | name   |
+----+--------+
|  1 | 张三 | 
|  2 | 李四 | 
|  3 | 王五 | 
+----+--------+
3 rows in set (0.00 sec)
 
# 下面才是我们要的结果
mysql> select * from test order by convert(name using gbk) asc;
+----+--------+
| ID | name   |
+----+--------+
|  2 | 李四 | 
|  3 | 王五 | 
|  1 | 张三 | 
+----+--------+
3 rows in set (0.00 sec)

PS: 上面的原理主要是把utf8转成了gbk字符集来排序,
 因为gbk中文排序就是按拼音来排序的。