一:问题描述:
之前做的一个小网站放在阿里云ECS CentOS服务器上,数据库是mysql放在阿里云RDS上,界面和数据库都采用UTF8编码没有任何问题,近日将数据库搬到服务器的mysql上,可是访问网站写入数据时出现乱码,记得mysql明明也是UTF8编码,怎么会乱码?
这是本地机器通过Navicat连接到服务器mysql
进入服务器mysql命令行:SHOW VARIABLES LIKE 'character%';
可以看到character_set_server的编码是latin1,说明mysql与界面交互式的编码不正确,下面将其编码修改为UTF8即可
二:解决方法,修改/etc/my.cnf文件
1、vim /etc/my.cnf
若/etc目录下没有这个文件,则通过进入根目录cd /,通过find -name *.cnf找到一个配置文件复制到/etc目录下,如下图所示
2、在[client]下添加:default-character-set=utf8
3、在[mysqld]下添加:character-set-server=utf8
注意:这里的设置与mysql的版本有关,我的msyql版本是5.5.40,可能低版本还是使用default-character-set=utf8,(若是重启mysql服务时报错,极可能是这里的问题,尝试一下即可)
4、在[mysql]下添加default-character-set=utf8
5、重启mysql服务:service mysql restart 或者 /etc/init.d/mysql restart ,然后再进入mysql命令行查看编码已修改成功!
三:总结
找到原因后在修改的过程中走了一些弯路,比如
1、在mysql命令行下修改编码:set character_set_server=utf8,这种虽然执行成功且接着查看编码的确显示utf8但是不是真正的修改,退出mysql后重新登录查看还是没有修改。
2、设置my.cnf后重启mysql服务总是报错,检查写的并没有错误,网上的回答也是多种多样,其实就是上面的第3点强调的内容。