MySQL 对中文排序的挑战(mysql对中文排序)
MySQL根据字母顺序进行排序是一件比较简单的事情,但对于中文,这就更加复杂了。对中文排序会导致各种问题,比如在MySQL中,英文字符串排序时可以忽略大小写,但中文排序让MySQL无法区分,这样就会出现乱序,如果使用大小写敏感排序,也会出现排序不准确的情况。
在MySQL中,没有内建的按照中文字符串排序的方法,可以直接使用内建的排序方法来解决这个问题。对于中文,需要用一种叫做“拼音排序”的排序方法,把按照汉字拼音进行排序。这种排序方法的原理很简单,就是把汉字转换成拼音,然后根据拼音顺序对汉字进行排序。拼音排序也有自己的特点,比如它可以按照首字母拼音,全拼,数量词等来排序,上面提到的都是按照拼音排序的方法,有时候也需要支持另外一种中文排序方法——和拼音排序类似,也是把汉字转换成拼音,然后根据字符顺序对汉字进行排序,叫做“笔画排序”,这种方法更麻烦,需要事先获取汉字的笔画数,再根据笔画数排序汉字,很复杂,不建议使用。
当然,MySQL也支持安装插件,这样就可以使用拼音排序,或者笔画排序。当前MySQL使用PinYin4j作为拼音排序工具,可以通过以下代码来实现:
CREATEFUNCTIONpinyin_sort_string(s VARCHAR(255))RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
DECLARE low_string VARCHAR(255);
SET low_string = lower(s);
RETURN CONVERT(LOWER(s) USINgGBK)COLLATECP936;
END;
调用函数后,可以得到经过拼音排序的结果:
SELECT * FROM ORDER BY pinyin_sort_string();
最后,MySQL的支持和解决中文排序的问题使得MySQL更加强大,可以用来处理更多不同的数据和场景。