环境:ubuntu 16+mysql 5.7+java 8+servlet 3.1
乱码:写入数据从控制台上看是正确的,但写入后再读出来就是?了。
那么肯定就是字符集的问题了。
先看看现在的设置值:在mysql里查询下
show variables like ‘%char%’;
会出来一堆,大部分是utf8,但其中:
character-set-server=latin1
character-set-databases=latin1
很显然,就是这儿。
先在mysql下尝试了用这个:
set character-set-server=utf8
set character-set-database=utf8
但是服务重启后就变回去了,所以看来只能修改配置文件。
mysql 5.7 刚刚安装好后,配置文件是 /etc/mysql/mysql.conf.d/mysqld.cnf,而且并没有my.cnf这个文件。似乎以前版本的mysql,安装后的配置文件都是/etc/mysql/my.cnf
打开/etc/mysql/mysql.conf.d/mysqld.cnf,发现第一句话就是:可以把这个拷贝成/etc/mysql/my.cnf
好,直接来:
cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/my.cnf
然后打开my.cnf,添上:
[client]
default-character-set=utf8
在[mysqld]这段里面,添上
character-set-server=utf8
保存,并重启mysql服务,就行了。