今天用hibernate向MySQL里插入中文发现乱码,后来连插入中文都插不了了,插入中文报错,插入英文没问题,百度了一下午,入了不少坑,现在来总结一下,帮助需要帮助的朋友们轻松解决问题,前人栽树后人乘凉。
管理员方式打开cmd,输入下面代码进入mysql:
mysql -u用户名 -p密码
接下来输入下面代码查看编码格式:
mysql> show variables like '%char%';
返回结果:
+--------------------------+----------------------------+
| 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/share/mysql/charsets/ |
+--------------------------+----------------------------+
可以发现有两个格式是latin1,我们需要将这两处改为 utf8
到你的mysql根目录下,有一个my-default-ini文件,新建一个my.ini文件,将my-default-ini里的内容复制到新建的my.ini文件中并在[mysqld]填加以下代码后关闭
character-set-server=utf8
collation-server=utf8_general_ci
Ps:在旧版本里是向 [mysqld]中添加
default-character-set=utf8
向 [client] 中添加
default-character-set=utf8
如果在5.6.37中这样添加的话,mysql 会跑不起来
在cmd中重启mysql,再次输入以下代码查看是否更改成功
mysql> show variables like '%char%';
若返回以下页面说明更改成功
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
这时使用mysql添加中文你会发现还是添加不了,真是让人头疼,本人以为是更改编码格式时出现了问题,又尝试了输入了什么
set character......各种代码来修改编码格式,但是还是无济于事,浪费了两个多小时的时间我发现了真相。
已存在的表和表空间还是插入不了中文,重新建表空间和表,中文插入成功!看到结果差点哭出了声