龙空技术网

MySQL按照中文拼音排序问题的处理

Coding周老师 209

前言:

此时你们对“mysql中文”都比较注意,我们都想要分析一些“mysql中文”的相关内容。那么小编同时在网上收集了一些对于“mysql中文””的相关文章,希望同学们能喜欢,朋友们快快来学习一下吧!

背景

项目开发中免不了数据的排序问题,排序中又免不了对中文的处理。今天分享一下如何在mysql中对中文进行排序。

正事儿

现有mysql数据表一个,默认的数据是这个样子的(省略了其它字段):

数据查询的时候不管是按添加时间还是按修改时间排序,领导都不满意,领导说:应该按照名字排序嘛,这样用户就可以预见他想要的数据在什么地方了。我说好,那就改吧。

发现还不是想要的效果,这也不能怪mysql,毕竟中文博大精深,而我们的目标实际是中文的拼音排序,默认情况下mysql是不认识的(虽然我的数据库所有编码都已经设置为了utf-8)。

用'强大'的百度查了下,mysql要想实现中文拼音排序有两种常用的办法:

第一种

不修改表结构,只修改查询语句:

明确的告诉mysql我这个字段要以gbk编码处理(用gb2312也可以的)

第二种

修改表结构不修改查询语句:

重点在红框位置,告诉mysql这个字段按照gbk编码处理(也可以是gb2312_chinese_ci)

效果和第一种方法一样

还有一种我没有验证的方法,网友提供的,大家可以参考下:

如果你使用源码编译MySQL,可以编译MySQL时使用 –with–charset=gbk 参数,这样MySQL就会直接支持中文查找和排序了(默认的是latin1)。也可以用 extra-charsets=gb2312,gbk 来加入多个字符集。

其实看到这里大家都已经明白了,说来说去还是编码的问题在作怪。只要是做开发的,肯定少不了遇到编码的问题,都被编码坑过。特别是数据库,编码问题更重要,上线之前编码如果处理不好,后续可能造成致命的伤。

补充一个我收集的处理mysql编码的资料。

通过 show variables like '%character_set%' 查看已有编码:

修改mysql的编码方式可以有以下几个:

1.通过配置文件修改my.ini(windows下)或/etc/my.cnf(linux下)

分别添加如下内容

[mysqld]

character_server_set=utf8

[mysql]

default-character-set=utf8

[mysql.server]

default-character-set=utf8

[mysql_safe]

default-character-set=utf8

[client]

default-character-set=utf8

2.创建数据库时设置编码

create database test character set utf8;

3.创建表时设置编码

create table test(id int primary key)DEFAULT charset=utf8;

4.修改数据库编码

alter database test character set utf8;

5.修改表默认编码

alter table test character set utf8;

6.修改字段编码

alter table test modify col_name varchar(50) CHARACTER SET utf8;

好了,今天就分享到这里。

标签: #mysql中文 #mysql不显示中文 #mysql支持中文字段 #mysql中文拼音排序 #mysql拼音查询