MySQL使用UTF-8编码时如何对汉字按拼音排序


关键词

MySQL 汉字 拼音 排序

摘要

本文介绍MySQL使用UTF-8编码时,如何对汉字进行按拼音排序。UTF-8里面是没有办法操作的,需要转码为GBK。

首先,创建一个测试表,并插入一些数据:

-- -----------------
-- 测试表
-- -----------------
DROP TABLE IF EXISTS `table1`;
CREATE TABLE `table1` (
  `n_id` int(11) NOT NULL AUTO_INCREMENT,
  `n_name` varchar(20) NOT NULL DEFAULT '' COMMENT '名称',
  PRIMARY KEY (`n_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT '测试表';

insert into `table1`(`n_name`) values('南京');
insert into `table1`(`n_name`) values('北京');
insert into `table1`(`n_name`) values('武汉');
insert into `table1`(`n_name`) values('上海');
insert into `table1`(`n_name`) values('重庆');
insert into `table1`(`n_name`) values('pinyin');
insert into `table1`(`n_name`) values('123');
我们现在要求按汉语拼音对n_name字段排序输出。如果SQL语句这样写:

select * from table1 order by n_name 
排出来的很乱,或者说看不出规律来,并不是我们想要的结果。这时,我们需要对要排序的字段转到GBK编码。

SELECT * FROM `table1` ORDER BY CONVERT(`n_name` USING GBK) COLLATE gbk_chinese_ci

这样貌似就能得到我们想要的结果了。但是,不对!你发现“重庆”跑到最后去了,它不应该在北京后面吗?对不起,它这里被读成“zhongqing”了。所以,遇到这种多音字,它是不完美的。

如果要顺序或倒序,可以这样写:

SELECT * FROM `table1` ORDER BY CONVERT(`n_name` USING GBK) COLLATE gbk_chinese_ci ASC
SELECT * FROM `table1` ORDER BY CONVERT(`n_name` USING GBK) COLLATE gbk_chinese_ci DESC

另外,有些网上的资料可能直接让我们转GB2312,我个人不建议这么搞。GB2312字库比GBK小,很多生僻字识别不出拼音来,问题会很多的。

关于MySQL使用UTF-8编码时如何对汉字按拼音排序,本文就介绍这么多,希望对大家有所帮助!

 

要饭二维码

洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!

文章的版权


如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D

« MySQL触发器统计子表数量