想要解决MySQL中文乱码首先必须了解下MySQL所支持的字符集,至于中文乱码出现的原因可以总结为:向数据库中插入的数据与数据库中的表所使用的字符集编码不同
一 . MySQL 中文字符集
常见支持中文的字符集有
GBK(双字节定长字符集) | 得到了大多数系统的支持 |
GB2312(双字节定长字符集) | 国标,收录了6763个常用汉字,比GBK少 |
GB 18030(不定长) | 同样是国标,但数据库支持得较少 |
UTF-8(不定长 1至4 字节) | 较为常用,被广泛支持 |
UTF-16 (不定长 2 或 4 字节) | 采用16位编码的形式 |
曾经天真的以为,将所有字符编码都设为UTF-8便可,呵呵
后来发现UTF-8编码的 一个汉字 就要占用 3 个字节 ,而 GBK 编码的 一个汉字 只占用两个字节
因此当数据库是用来保存大量中文同时少量出现英文字符(即ASCII)码时,最好将该数据库的编码设为GBK(最为常见的情景就是保存小说了,大量的中文同时夹杂些英文字符)。这样就可以减少磁盘I/O,节省网络带宽。
当然,如果你的网站需要跨越多个语言区域的话,那UTF-8就是不二之选了。
二. MySQL中中文乱码的解决
记录一下自己中文乱码解决的过程
1. 打开数据库查看自己当前默认数据字符集的设置(在创建表的时候如果不制定字符集的话 MySQL将使用默认字符集来处理表或数据库)
输入
show variables like '%char%';
修改值定变量的字符集: 如将客户端的字符集修改为GBK
set character_set_client=gbk;
修改完之后,再创建新表如果没有特殊指定的话 ,就会使用你所指定的默认字符集
2.修改表的字符集
alter table table_name charset=utf8
3.修改配置文件
在Windows下Mysql的配置文件 my.ini中
将character_set_server设置为你所想要的值
如下将其值设置为UTF8
character_set_server=utf8
4.注意
Windows 下的控制台中默认是不支持UTF8编码,所以无论你怎么改,中文仍然是问号,或者乱 码(当然可以通过操作使其支持UTF8编码)。
三.MySQL 校对规则
MySQL 在对字符或字符串进行 比较 或 排序 的时候是根据字符集所对应校验规则集来决定大小写是否 敏感,或是根据字符的值来进行排序或比较。
每个字符集至少对应一种校对规则
使用以下语句来查看字符集所对应的校对规则
show collation like 'gbk8%';
排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:
1)_ci:不区分大小写的排序方式
2)_cs:区分大小写的排序方式
3)_bin:二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言
因此,gbk_chinese_ci排序方式就表示:字符集为gbk,人类语言使用中文来比较大小,比较时区分大小写。