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

-- -----------------

-- -----------------

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编码时如何对汉字按拼音排序,本文就介绍这么多,希望对大家有所帮助!

03-14 08:58