一 情况描述:
我的情况是这样,首先我的项目的编码格式是UTF-8,客户端请求时的编码也是UTF-8,在项目配置文件的数据库路径也设置了UTF-8格式编码,如下:
characterEncoding=utf-8&useSSL=false,通过打点调试结果是 客户端请求传递过来的数据(当然数据是String类型的汉字)是正常的,把数据插入到MySql数据库中就变成了乱码,根据网上大多说法这是MySql数据库编码的问题,下面就来看看如何修改MySql数据库编码。
二 修改MySql数据库编码步骤
1 查看当前自己数据库系统的编码格式
先进入MySQl环境下:
$ /usr/local/mysql/bin/mysql -u root -p 按Enter键
Enter password: 输入自己数据库的密码 ,按Enter键
成功进入后输入如下命令:
mysql> show variables like '%char%'; 按Enter键 会出现类似下面的结果:
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.19-macos10.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)
latin1 ,我们想要解决上述乱码的问题需要把 character_set_database 和 character_set_server
2 关闭mysql服务
在系统偏好设置中,可以直接在右上角的搜索框输入mysql就行搜索,找到后直接点击stop mysql server 就好。
3 创建my.cnf文件
另外打开一个终端新窗口,输入如下命令:
$ sudo vi /etc/my.cnf 按Enter 进入编辑界面,
当然如果这个文件已经存在你也可以通过这种方式打开这个文件进行编辑,这种情况下
你只需default-character-set 、character-set-server对应的编码格式改为gbk就可以了。
要是新创建的my.cnf 文件把如下代码复制粘贴过去
[client]
default-character-set=
gbk
[mysqld]
character-set-server=
gbk
最后 按esc ,输入:wq! 保存退出编辑。
4 参考步骤2重启mysql server
这是时候我们再返回第一次打开的终端窗口,再次输入show variables like '%char%'; 按Enter键 会出现类似下面的结果:
+--------------------------+-----------------------------------------------------------+
| Variable_name | Value |
+--------------------------+-----------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
gbk |
| character_set_filesystem | binary |
| character_set_results | utf8 |
gbk |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql-5.7.19-macos10.12-x86_64/share/charsets/ |
+--------------------------+-----------------------------------------------------------+
8 rows in set (0.01 sec)
character_set_database 和 character_set_server
然后再往mySql数据库中写数据时,乱码消失了。
有人可能会质疑请求传递过的数据编码格式UTF-8 ,而数据库的编码格式是gbk,反而没有出现乱码,在往数据库中写数据的过程中系统自动完成了这种格式的转换。