想要解决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 mysql 中文乱码 mysql汉字乱码_中文乱码

                        

                         修改值定变量的字符集: 如将客户端的字符集修改为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%';

            

gbk mysql 中文乱码 mysql汉字乱码_gbk mysql 中文乱码_02

            排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:

           1)_ci:不区分大小写的排序方式

           2)_cs:区分大小写的排序方式

           3)_bin:二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言

因此,gbk_chinese_ci排序方式就表示:字符集为gbk,人类语言使用中文来比较大小,比较时区分大小写。