mysql设置utf8mb4解决emoji显示乱码

网络上有相关的解决文章,但我看了觉得写得都不是很清晰,所以把我自己的解决步骤记录下来.无需重启数据库的方法见文章最后.这里针对的是版本为5.5.3以上的mysql数据库(低版本不支持utfmb4),另外JDBC驱动版本不能太低,mysql connector版本高于5.1.13

1.修改mysql配置文件

修改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’

2.重启并检查变量

重启指令(不同平台指令可能不同)

service mysqld restart

等重启成功后进入mysql执行查询

SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';

得到的结果应该如下:

Variable_nameValue
character_set_clientutf8mb4
character_set_connectionutf8mb4
character_set_databaseutf8mb4
character_set_filesystembinary
character_set_resultsutf8mb4
character_set_serverutf8mb4
character_set_systemutf8
collation_connectionutf8mb4_unicode_ci
collation_databaseutf8mb4_unicode_ci
collation_serverutf8mb4_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(默认的内部操作字符集)

3.修改mysql驱动配置

在连接参数里加上useUnicode=true&&characterEncoding=utf8
jdbc:mysql://localhost:3306/test?useUnicode=true&autoReconnect=true
记得加上characterEncoding=utf8,否则中文可能乱码

其他注意事项
对于已有的utf8数据库,可通过修改数据库字符集获得支持,但有时还需修改表字符集.对于较小的数据库,可直接将sql转存出来,新建默认字符集为utf8mb4的数据库,再导入sql

无需重启mysql的方案

  1. 将表中的对应字段,比如会员表的呢称字段,其字符集修改成utf8mb4。
  2. 最后修改druid数据源的配置,增加一行:
    <property name="connectionInitSqls" value="set names utf8mb4;"/>
  3. 检查下jdbc连接串的设置: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

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值