mysql按照中文名称排序

mysql按照中文名称排序
 
Sql代码  www.2cto.com  
/*  
Navicat MySQL Data Transfer  
  
Source Server         : local  
Source Server Version : 50022  
Source Host           : localhost:3306  
Source Database       : test  
  
Target Server Type    : MYSQL  
Target Server Version : 50022  
File Encoding         : 65001  
  
Date: 2012-11-19 15:46:13  
*/  
  
SET FOREIGN_KEY_CHECKS=0;  
  
-- ----------------------------  
-- Table structure for `person`  
-- ----------------------------  
DROP TABLE IF EXISTS `person`;  
CREATE TABLE `person` (  
  `id` int(10) unsigned NOT NULL auto_increment,  
  `name` varchar(20) default NULL,  
  PRIMARY KEY  (`id`)  
) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  
-- ----------------------------  
-- Records of person  
-- ----------------------------  
INSERT INTO `person` VALUES ('1', '张三');  
INSERT INTO `person` VALUES ('2', '李四');  
INSERT INTO `person` VALUES ('3', '王五');  
INSERT INTO `person` VALUES ('4', '马六');  
INSERT INTO `person` VALUES ('5', '钱七');  
 
正序: 
select * from person ORDER BY CONVERT(name USING gbk);
结果:
2 李四
4 马六
5 钱七
3 王五
1 张三
 
倒序:
select * from person ORDER BY CONVERT(name USING gbk) desc 
结果:
1 张三
3 王五
5 钱七
4 马六
2 李四

转载于:https://www.cnblogs.com/icejd/p/4550951.html

<think>嗯,用户问的是如何在MySQL中按拼音排序中文名字。首先,我得回忆一下MySQL处理中文排序的方法。记得之前看过一些资料,可能需要用到CONVERT函数转换字符集。不过具体怎么操作呢? 首先,用户提到中文排序的问题,因为MySQL默认的排序规则可能不是按拼音来的。根据引用里的内容,比如引用[1]和[5],都提到使用CONVERT函数将字段转换为GBK编码,这样可以按拼音排序。比如这样的语句:SELECT * FROM table ORDER BY CONVERT(name USING GBK);。这样应该就能实现拼音排序了。 不过,用户可能遇到的问题是什么呢?比如,如果数据库的字符集不是GBK的话,是否会有影响?引用[4]提到,如果数据库字符集是GBK,可以直接排序,否则需要转码。而如果数据库用的是UTF8或者其他字符集,就必须用CONVERT转换。另外,排序规则可能还和collation有关,像引用[3]里提到collation的设置会影响排序,可能需要修改表的排序规则为gbk_chinese_ci之类的。 还有用户可能会疑惑为什么直接按字段排序不行,像引用[5]中说的,虽然字段是Latin1存储的GBK内码,但直接排序可能还是不符合预期。这时候必须显式转换字符集。 那步骤应该是先检查数据库的字符集和排序规则,然后决定是否需要转换。对于UTF8的情况,使用CONVERT(name USING GBK)来排序。如果数据库已经是GBK编码,可能直接ORDER BY name就可以了。另外,还可以通过修改列的排序规则为gbk_chinese_ci来避免每次转换,如引用[3]中的例子,用ALTER TABLE修改列的COLLATE属性。 不过要注意的是,修改表的排序规则可能会影响其他查询,所以需要谨慎。此外,引用[4]还提到GBK排序并不是完全按照拼音字母顺序,比如例子中的安徽、鞍钢、俺测试的排序结果,说明可能存在一些特殊情况,用户需要注意这一点。 总结下来,主要的解决方法有三种:使用CONVERT函数转换,修改列的排序规则,或者调整数据库字符集。用户可以根据具体情况选择合适的方法。同时,需要提醒用户注意不同字符集的影响和可能存在的排序细节问题。</think>### MySQL中文拼音排序实现方法分步说明 --- #### 一、核心原理 中文拼音排序需要将汉字转换为GBK编码格式,因为GBK编码采用汉字拼音顺序作为排列标准。MySQL原生支持通过$CONVERT()$函数实现字符集转换,配合排序操作即可实现拼音排序[^1][^4]。 --- #### 二、具体实现步骤 1. **基础方法:使用CONVERT函数** ```sql SELECT * FROM users ORDER BY CONVERT(name USING GBK); ``` 适用于所有字符集(UTF8/GBK等),强制将字段转换为GBK编码后排序[^5] 2. **修改列的默认排序规则** ```sql ALTER TABLE users MODIFY name VARCHAR(50) CHARACTER SET gbk COLLATE gbk_chinese_ci; ``` 永久性修改字段排序规则,避免每次查询转换[^3] 3. **字符集兼容处理(针对Latin1存储GBK的情况)** ```sql SELECT * FROM users ORDER BY name COLLATE gbk_chinese_ci; ``` 适用于以Latin1存储GBK编码的字段[^5] --- #### 三、注意事项 1. GBK排序不是严格拼音字母序,如"安徽(anhui)"会排在"鞍钢(angang)"之前 2. 修改字符集前需备份数据,避免编码错误 3. 查看当前字符集: ```sql SHOW VARIABLES LIKE 'collation%'; ``` 输出示例: ``` +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_0900_ai_ci | ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值