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

    结果如下:

    成功!

  • 相关阅读:
    InstallShield 2010集成.net Framework 4的安装包制作
    linux之稀疏文件
    linux之od命令
    Python多线程
    GCC编译器和GDB调试器常用选项
    Linux GDB Debug
    Linux Core Dump
    linux 通过 ulimit 改善系统性能
    linux的ulimit命令
    字符编码笔记:ASCII,Unicode和UTF-8
  • 原文地址:https://www.cnblogs.com/java-spring/p/14230876.html
Copyright © 2011-2022 走看看