首先,创建一个测试表,并插入一些数据:
-- -----------------
-- -----------------
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编码时如何对汉字按拼音排序,本文就介绍这么多,希望对大家有所帮助!