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更加强大,可以用来处理更多不同的数据和场景。


数据运维技术 » MySQL 对中文排序的挑战(mysql对中文排序)