在做中文排序时,我们希望查询出来的记录能够按照汉语拼音即英文的26个字母排序,但是 utf8mb4 字符集是外国人弄的,不是按照汉语拼音的顺序排列的。
因此,我们需要将要排序的字段把编码设定为 GBK 再进行排序。

环境

K

V

版本

5.7.28

字符集

utf8mb4

解决方案

  • mysql 中对字符的转码支持的不错,convert() 函数,直接搞定

缺点 :不能解决多音字的问题
比如: 重庆chong qing 使用convert() 函数转换后,发音为zhong qing

SQL实验

  1. 正常查询
SELECT user_desc FROM user_table ORDER BY user_desc DESC;
  1. utf8mb4 转 gbk 编码 按字母升序
SELECT user_desc FROM user_table ORDER BY CONVERT(user_desc USING gbk);
  1. utf8mb4 转 gbk 编码 按字母降序
SELECT user_desc FROM user_table ORDER BY CONVERT(user_desc USING gbk) DESC;
  1. utf8mb4 转 utf8mb4 编码 按字母降序(同1
SELECT user_name FROM user_table ORDER BY CONVERT(user_name USING utf8mb4) DESC;