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