對漢字內容的字段進行排序,用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')
結果如下:
成功!