mysql按照首字母对汉字进行排序

对汉字内容的字段进行排序,用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')

结果如下:

 

成功!

 

posted @ 2021-01-04 17:05  劈天造陆  阅读(2989)  评论(0编辑  收藏  举报