今天在帮朋友弄一个Java的web项目的时候,发现一个奇怪的问题,同一个项目,在本地运行,数据存在本地的mysql,没有任何问题,但把项目部署到云服务器上,用服务器的mysql时,项目向mysql添加的每一个中文都变成了问号。
经过不断排查问题,最后把问题定位在了服务上mysql字符集上。(这里有个前提:代码都做好了字符集的处理,确保了前后端交互的数据不会乱码)
解决方法:修改配置文件,设置mysql字符集为utf8
本人用的服务器为ubuntu 18.04版本。
输入mysql命令,进入mysql的控制台,输入如下命令查看字符集:
show variables like 'chara%';
如下图:
通过这些字符集可以看到,问题就出现在值为latin1的字符集上。
接下来进行修改:
回到linux的控制台,输入如下命令打开my.cnf文件(我这个版本路径是etc/mysql/my.cnf,如果没有这个文件,可输入命令 locate my.cnf 查找一下在哪个位置即可):
vim /etc/mysql/my.cnf
在文件中添加如下内容:
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
如下图所示:
完成后保存退出。重启mysql服务:
service mysql restart
一定要记得重启服务,不然上面的配置没有起作用。
到此就已经完成了,再次去查看字符集确认一下:
latin1已经改为utf8了,这个时候再存中文也没有再变成问号了。