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')

结果如下:

 

成功!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM