赞
踩
网络上有相关的解决文章,但我看了觉得写得都不是很清晰,所以把我自己的解决步骤记录下来.无需重启数据库的方法见文章最后.这里针对的是版本为5.5.3以上的mysql数据库(低版本不支持utfmb4),另外JDBC驱动版本不能太低,mysql connector版本高于5.1.13
修改mysql配置文件my.cnf(windows为my.ini)
my.cnf一般在etc/mysql/my.cnf位置(有的在etc目录下)。找到后请在以下三部分里添加如下内容:
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect=’SET NAMES utf8mb4’
重启指令(不同平台指令可能不同)
service mysqld restart
等重启成功后进入mysql执行查询
SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
得到的结果应该如下:
Variable_name | Value |
---|---|
character_set_client | utf8mb4 |
character_set_connection | utf8mb4 |
character_set_database | utf8mb4 |
character_set_filesystem | binary |
character_set_results | utf8mb4 |
character_set_server | utf8mb4 |
character_set_system | utf8 |
collation_connection | utf8mb4_unicode_ci |
collation_database | utf8mb4_unicode_ci |
collation_server | utf8mb4_unicode_ci |
其中以下需为utf8mb4,其他没关系(不过实测只要character_set_database和character_set_server是utf8mb4即可正确存取)
系统变量 | 描述 |
---|---|
character_set_client | (客户端来源数据使用的字符集) |
character_set_connection | (连接层字符集) |
character_set_database | (当前选中数据库的默认字符集) |
character_set_results | (查询结果字符集) |
character_set_server | (默认的内部操作字符集) |
在连接参数里加上useUnicode=true&&characterEncoding=utf8
如jdbc:mysql://localhost:3306/test?useUnicode=true&autoReconnect=true
记得加上characterEncoding=utf8,否则中文可能乱码
其他注意事项
对于已有的utf8数据库,可通过修改数据库字符集获得支持,但有时还需修改表字符集.对于较小的数据库,可直接将sql转存出来,新建默认字符集为utf8mb4的数据库,再导入sql
<property name="connectionInitSqls" value="set names utf8mb4;"/>
jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=utf8
参考文章:
https://segmentfault.com/a/1190000004594385
http://blog.csdn.net/woslx/article/details/49685111
http://blog.csdn.net/u013075699/article/details/61418513
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。