解决MySQL数据库中文乱码(2)
说明
当我们实使用mysql数据库来进行开发时经常会遇到各种各样的中文乱码问题,这是非常的令人烦恼的,当然百度上也有各种各样的解决方法,那当然可以解决一大部分的问题,而我在学习的过程中却遇到过一个非常奇葩的中文乱码问题(即按照常规教程都无法解决的幽灵问题),最后机缘巧合让我解决了,所以在这里写下来作为学习笔记!
中文乱码问题描述
使用MySQL创建数据库,然后插入数据时发现插入中文数据,在数据库中会乱码,然后使用如下命令查询数据库当前的MySQL默认字符集编码:
show variables like "%char%";
如果显示为:
则说明MySQL数据库的默认字符编码是latin1;这种字符编码是ISO-8859-1的别名,而ISO-8859-1编码是单字节编码,向下兼容ASCLL,可以支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃,但是由于一个中文字符占用两个字节的内存空间,所以这种编码存储中文时就会出现问题;当我们需要存储中文时就要修改MySQL的默认字符编码,方法有很多,下面先展示最常见的一种:
常见方法
找到MySQL的安装路径,如果忘记了这个路径可以在MySQL服务中找到
然后打开my.ini配置文件,按照下面操作修改:
在[client]下加入代码:
default-character-set=utf8
在[mysqld]下修改代码:
character_set_server=utf8
在[ mysql ]下修改代码:
default-character-set=utf8
修改后重启MySQL服务;然后再次使用以下命令查询字符编码
show variables like "%char%";
如果查询结果如下,则修改成功,否则失败!
第二种方法(mysqlZt服务)
如果你按照第一种方法修改完重启服务之后没有任何变化,或者有变化,但是“character_set_database”和“character_set_server”这两项没有被修改为utf8,则可以尝试一下下面这种方法:
打开服务,观察在MySQL服务旁边有没有一个名为“mysqlZt”的服务,
如果有,打开它的属性,复制它的可执行文件路径,
找到该路径下的my.ini文件,按照以下修改,
在[mysqld]下修改代码(如果没有则添加进去):
character_set_server=utf8
在[ mysql ]下修改代码(如果没有则添加进去):
default-character-set=utf8
然后重启MySQL和mysqlZt这两个服务;再查询一下字符编码!你会发现,“character_set_database”和“character_set_server”这两项被修改成utf8了!
以下是我的默认字符编码格式(gbk是因为我的控制台默认使用了gbk,这个可以根据自己的情况修改)