MySQL插入表之后中文显示乱码(个人总结篇)

来源:互联网 发布:如何开通淘宝客 编辑:程序博客网 时间:2024/06/05 05:50
MySQL插入表之后中文显示乱码(总结篇)
近期在学习PHP、Ajax相关的知识,第一次接触命令行的MySQL,遇到了一些问题,以下都是查询了很多资料总结的。
我目前是win8系统,用XAMPP搭的本地服务器和数据库,需要插入一些表格并将其显示出来,因为表格中有中文字符,所以就发生了乱码的问题。

问题解决方法:

一、查看数据库编码:
发现问题了之后,首先应该查看数据库编码:
show variables like'%char%';

二、将客户端的编码设为gbk:
两种暂时修改的方式(这种方式重启之后设置就恢复了):
set names 'gbk';
(注意是names不是name)
或者输入:
set character_set_results=gb2312
两者的不同之处就是第一种将client、connection、results(也就是客户端)全部改为了gbk;第二种只是把results改为了gbk,结果是一样的:

在XAMPP界面打开MySQL的config下的my.ini文件,找到[client]、[mysqld]、[mysql],现在大概是这么一个情况,什么都没有加(因为在以下的方法中会加一些语句,如果修改了这些语句就不用每次都更改编码了可以一劳永逸,但是解决我的问题的方法还没有找到一劳永逸的,就每次都输入set names 'gbk';吧)
贴个图:



完成之后查看我们之前插入的带有中文数据的表(在此过程中不用重新删除表或者数据库,按照上面方法改个编码方式就好了):

奏是这么简单,数一下这一路走过来的坑,有些坑是自己踩进去的,应该说不同的解决方法适应不同的情况吧,下面贴出其他情况的解决方案,上面解决不了的可以看看下面的:


其他方法一:

本方法引用:http://www.cnblogs.com/sunzn/archive/2013/03/14/2960248.html
(这个方法和上面的解决方法几乎一致,但是楼主后面有个一劳永逸的步骤,我没实验成功,但是还是提供给大家参考)
一、查看数据库编码:show variables like'%char%';

MySQL 有六处使用了字符集,分别为:client 、connection、database、results、server 、system。其中与服务器端相关:database、server、system;与客户端相关:connection、client、results 。
client为客户端使用的字符集。connection为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。database为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。results    为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。server为服务器安装时指定的默认字符集设定。system为数据库系统使用的字符集设定。

二、解决客户端插入数据或显示数据的乱码问题
当前的 cmd 客户端(DOS)输入采用 GBK 编码,而数据库的编码格式为 UTF-8,编码不一致导致了乱码产生。修改 connection、 client、results 的编码集来告知服务器端当前插入的数据采用 GBK 编码,而服务器的数据库虽然是采用 UTF-8 编码,但却可以识别通知服务器端的 GBK 编码数据并将其自动转换为 UTF-8 进行存储。可以使用如下语句来快速设置与客户端相关的编码集:
第一种是暂时修改的方法
set names 'gbk
第二种是永久性修改:在XAMPP界面打开MySQL的config下的my.ini文件,找到[mysqld]、[mysql],默认为(虽然我的默认什么都没有):
[mysqld]
character_set_server=utf8
[mysql]
default-character-set=utf8
修改[mysql]的为:
[mysql]
default-character-set=gbk
重新启动 MySQL 服务


其他方法二:

本方法引用:http://blog.csdn.net/violet_echo_0908/article/details/51498829
在XAMPP界面打开MySQL的config下的my.ini文件,找到[client]、[mysqld]、[mysql]设置为:
(注意default-character-set和character_set_server是不一样
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf
[mysql]
no-auto-rehash
重新启动 MySQL 服务


其他方法三:

本方法引用:http://www.cnblogs.com/houqi/p/5713176.html
在XAMPP界面打开MySQL的config下的my.ini文件,找到[client]、[mysqld]、[mysql]设置为:
(注意default-character-set和character_set_server是不一样,这是个坑)
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
collation-server=utf8_general_ci
之后要确认要三个方面:更改数据库的默认字符集为utf8,更改表的字符集为utf8,更改列的字符集为utf8:
先用命令查看表的编码为:
show create table table.name(数据库名.表名);
修改方法:
ALTER DATABASE `数据库` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_c
ALTER TABLE `数据表` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci

其他方法四:

本方法引用:http://www.jianshu.com/p/4c6a27542df4
(本方法和二相似,列出来主要说明一下,方法三中说的坑,这个楼主遇到了)
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
[mysql]
default-character-set=utf8
重启MySQL,重启后设置的编码依旧生效(之前创建的数据库需要重新创建)


其他方法五:

本方法引用:http://blog.csdn.net/congzi0424/article/details/51382252
因为操作系统是中文操作系统,默认使用的字符集是GB2312,所以需要把输出窗口使用的字符编码改成gb2312才能够正常显示中文。使用如下的命令设置输出窗口使用的字符编码:
set character_set_results=gb2312;
(之前找到这个方法的时候输入set character_set_results=gb2312;但是中文乱码问题没有解决,后来写这篇总结的时候改成了set character_set_results=gbk;看看哪种适用咯

其他方法六:

本方法引用:https://yq.aliyun.com/articles/40384
这个有关chcp命令的方法,其实是解决在cmd窗口中显示UTF-8字符(应该是打开一个文件的问题),之前没看清楚,但是也贴出来做一个总结:
chcp是MS DOS中的命令,用来显示或设置活动代码页编号的。
输入一下命令可以查看当前代码页:
chcp
比如在默认的cmd窗口中,输入chcp

936表示当前使用的是简体中文(GB2312)编码。UTF8代码页的编号为65001
现在让cmd支持UTF8:
win+R运行cmd后输入:
chcp 65001
页面变成:

如果想要chcp每次打开都是65001,就用regedit打开 注册表,HKEY_CURRENT_USER\Console,双击打开CodePage,十进制中修改为65001

窗体上右键,选择属性,在字体中设置Lucida Console,确定:

但是此时的窗口中使用ctrl+space是不能切换输入法的(查了conime.exe等方法都不能实现,如果可以的话烦请告诉我哈),也就是不能输入中文,又是一个坑。


最后贴个最大的总结篇,里面描述的也很详细:
http://blog.csdn.net/ACMAIN_CHM/article/details/4174186

以上都是一个下午查到的各类方法,方法很多,但是感觉有点繁杂,所以又花了点时间总结了一下,希望能帮助遇到这个问题的人。关于里面是为什么这样设置,字符集的一些知识,我也还没有研究的特别深入(所以才会试了那么多中方法,踩了那么多坑啊。⊙ o ⊙