问题
当遇到中文乱码问题时请首先排查是哪个地方乱码,可能是在网络通信的两端,也可能是程序和数据库对接的过程中,阅读本文前请先通过调试确认你的乱码问题出在MySQL。
排查
一般乱码问题的解决方法无非是把编码设置为utf-8
打开MySQL命令行,输入show variables like '%character%';查看各种变量的编码:
(截图为解决成功的)
如果和截图值不相符,出现latin1等编码,则可确定问题应该出在MySQL
解决
将除character_set_filesystem之外的变量值设置为utf8,设置方法为命令行输入:
SET character_set_client='utf8';
其他变量设置方法同上。
然后打开mysql的配置文件。关于文件位置,我的ubuntu系统下在etc/mysql/conf.d/mysql.cnf ,有说在/etc/my.cnf, windows系统在安装目录下的my.ini文件,总而言之,如果文件内容是形如
[mysqld]
character-set-server=...
[mysql]
default-character-set=...
则打开正确。
将文件内容修改为:
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
保存并退出。
这样便解决成功。
注意事项
- 修改完成如果没有效果可尝试重启数据库服务或重启电脑
- 本文所列方法为全局的解决方法,已经设置默认编码为utf8,按照上述操作后无需再在连接数据库或创建数据库时后缀设置编码的代码,如:jdbc:mysql://localhost:3306/MyDataBase?setEncoding=utf-8...
- 重新设置编码之后,之前创建的数据库仍会沿用以前的编码,所以如果想要之前的数据库中文不乱码最好删除数据库重建,不建议使用alter关键字修改,可能出现混乱。查看数据库和表的编码的命令是:show create database XXX; 或show create table XXX; 可看到charset=utf-8即为修改成功。
- 修改文件和命令行设置变量编码的操作可能存在重复,是博主的解决流程,两种都可以操作一下,最后达到效果即可。