在学习java web项目过程中,从页面输入的中文文字插入到MySQL数据库中总是乱码。
在web.xml里面也设置了字符集的过滤,依然没有用。
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
用Debug模式查看,在页面输入到java后台过程,中文没有乱码,是在插入数据库的时候中文乱码,查看数据库的字符集设置
show variables like 'character%';
发现character_set_server的字符集是latin1
使用命令
set character_set_database=utf8;
set character_set_server=utf8;
更改数据库字符集后,重新插入数据还是乱码。
在终端用命令行的模式登陆mysql数据库后,
mysql -uxxxx -pxxxx
查看数据库字符集,发现如下信息
mysql> \s
--------------
mysql Ver 14.14 Distrib 5.7.23, for macos10.13 (x86_64) using EditLine wrapper
Connection id: 44
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.23 MySQL Community Server (GPL)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
UNIX socket: /tmp/mysql.sock
Uptime: 14 hours 20 min 38 sec
于是从网上查了一些方法,在目录/etc下创建文件/etc/my.cnf
[mysqld]
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
重启mysql服务,
bash-3.2$ sudo /usr/local/mysql/support-files/mysql.server restart
Starting MySQL
. SUCCESS!
再次查看字符集,已经更改过来。 数据库插入中文乱码问题就搞定了。
在重启mysql过程中,遇到了另外一个问题,用kill -9杀死进程后,mysql一直自动重启,使用命令
sudo launchctl unload -w /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
完美解决,使用命令前需要确认该路径下的文件名称是否一致.