找了一下国内和国外网站,都没有很好的解决方案。
大概的几个建议:
一、
最简单的排序方法
最简单的排序方法只需要一条 SQL语句:
select * from musician_ordered order by convert(name using gbk) collate gbk_chinese_ci;
首先,对name字段进行gbk编码,然后,对编码后的内容根据gbk_chinese_ci进行整理排序。
这样得到的结果,英文是排在中文前面的,而且是根据拼音排序的。
http://www.lijiejie.com/mysql-first-char-filter/
二、
mysql对中文的支持真是比较差,一旦库里面既有中文数据,又有英文数据,排序出来就是乱七八糟的. 在网上搜了一下,大家给出的几个解决方案都不太好用.
这里给出一个土一点的解决方法,比较适合已经有大量数据,并且很少有新数据加入的情况. 在数据导入前,在excel或者别的软件里把数据排序好,这些软件一般都对多语言支持比较好,排序好后, 加一列,这列为id,顺序递增,然后导入mysql. 以后,需要按字母顺序排序的时候, 直接按id排序即可. 如果要插入数据, 可用相应的算法保证插入时不打乱排序.
三、数据量不大的情况下,数据查出来以后,用java/pyton等语言的工具类转换,把中文数据转换成英文后在排序。亲测java拼音类可以实现。
如果有其他更好的方法,欢迎分享。