一、python 排序
汉字排序是按照unicode数值排序
ord() 函数是 chr() 函数(对于 8 位的 ASCII 字符串)的配对函数,它以一个字符串(Unicode 字符)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值。
解决方案,使用汉字转拼音库pypinyin ,得到拼音及音调
from itertools import chain
from pypinyin import pinyin, Style
def to_pinyin(s):
return ''.join(chain.from_iterable(pinyin(s, style=Style.TONE3)))
print(sorted(char))
print(sorted(char, key=to_pinyin))
# ['佘', '孙', '李', '赵', '钱']
# ['李', '钱', '佘', '孙', '赵']
二、用mysql进行排序
在查询语句的 order by 部分使用 CONVERT 函数。
比如 select * from mytable order by CONVERT(chineseColumnName USING gbk);
UTF8 默认校对集是 utf8_general_ci , 它不是按照中文来的。你需要强制让MySQL按中文来排序。
下面给出一个例子:
按中文排序前:
按custName字段进行升序排列:
SELECT * FROM t_customer ORDER BY CONVERT(custName USING gbk) ASC
扫描二维码关注公众号,回复:
16968705 查看本文章
按custName字段进行降序排列:
SELECT * FROM t_customer ORDER BY CONVERT(custName USING gbk) DESC