对汉字内容的字段进行排序,用order by 字段 是不行的,因为mysql编码一般是UTF8的,而要相对汉字进行排序必须用GBK编码。
先看下平常的order by
新建test表
CREATE TABLE `test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
插入数据
INSERT INTO `test`.`test`(`id`, `name`) VALUES (1, '你好'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (2, '哈哈'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (3, '财务'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (4, '思想'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (5, '大海'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (6, '阿里巴巴'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (7, '秘密'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (8, '百度'); INSERT INTO `test`.`test`(`id`, `name`) VALUES (9, '嘻嘻');
按照name字段正序排列结果:
可以看到排序错误
下面有两种方式可以进行按照首字母进行汉字排序:
1、将字段设置为GBK编码
先查看之前创建的字段编码为
现在修改为gbk
ALTER TABLE `test`.`test` MODIFY COLUMN `name` varchar(255) CHARACTER SET gbk COLLATE gbk_chinese_ci NULL DEFAULT NULL AFTER `id`
再次进行排序
成功!
2、字段编码还是用utf8,但是查询的时候通过sql将字段进行GBK编码(推荐)
下面把字段编码改回utf8
ALTER TABLE `test` MODIFY COLUMN `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `id`
然后通过下面的sql查询
SELECT * FROM test ORDER BY CONVERT(name USING 'gbk')
结果如下:
成功!