首先,创建一个测试表,并插入一些数据:
-- ----------------- -- 测试表 -- ----------------- 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编码时如何对汉字按拼音排序,本文就介绍这么多,希望对大家有所帮助!
要饭二维码
洪哥写文章很苦逼,如果本文对您略有帮助,可以扫描下方二维码支持洪哥!金额随意,先行谢过!大家的支持是我前进的动力!
文章的版权
本文属于“洪哥笔记”原创文章,转载请注明来源地址:MySQL使用UTF-8编码时如何对汉字按拼音排序:http://www.splaybow.com/post/mysql-hanzi-pinyin-paixu-2342.html
如果您在服务器运维、网络管理、网站或系统开发过程有需要提供收费服务,请加QQ:8771947!十年运维经验,帮您省钱、让您放心!
亲,如果有需要,先存起来,方便以后再看啊!加入收藏夹的话,按Ctrl+D!
发布时间:2022/1/1 7:32:44 | 编辑:洪哥 | 分类:MySQL | 浏览: