zoukankan      html  css  js  c++  java
  • 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')

    结果如下:

    成功!

  • 相关阅读:
    多态的详解
    Java继承详解
    static关键字特点
    数组(相关知识的整理)
    杨辉三角(用for循环)
    Jmeter接口测试案例实践(一)
    组合测试方法:配对测试实践
    用例设计方法:判定表驱动法实践
    sso系统登录以及jsonp原理
    单点登录--sso系统
  • 原文地址:https://www.cnblogs.com/java-spring/p/14230876.html
Copyright © 2011-2022 走看看