文档说明
本文档主要针对mysql 5.5之后,jdbc向mysql插入emoji表情或者4字节字符报错的情况,通过配置my.cnf,database,table,测试修改utf8mb4字符集的可行方法。
测试环境
测试结果
测试代码:
[main]
[db.properties]
测试过程:
my.cnf=utf8|database=utf8|tables=utf8
result
无法写入4字节的字符
my.cnf=utf8|database=utf8|tables=utf8mb4
result
无法写入4字节的字符
my.cnf=utf8|database=utf8mb4|tables=utf8
result
无法写入4字节的字符
my.cnf=utf8|database=utf8mb4|tables=utf8mb4
result
无法写入4字节的字符
my.cnf=utf8mb4|database=utf8|tables=utf8
修改my.cnf character-set-server=utf8mb4:
result
无法写入4字节的字符
my.cnf=utf8mb4|database=utf8|tables=utf8mb4
result
成功写入。
在库中可以成功读取。
my.cnf=utf8mb4|database=utf8mb4|tables=utf8
result
无法写入4字节的字符
my.cnf=utf8mb4|database=utf8mb4|tables=utf8mb4
result
成功写入。
在库中可以成功读取。
utf8-utf8mb4修改方案
对于现有生产环境中的MySQL5.5版本以及由MySQL5.5升级后的MySQL5.7等使用utf8的情况(MySQL实例、DB、表、字段等均为utf8字符集),在遇到字符集问题时,可以采用以下快速简易方法进行修正:
Java代码中获取数据库连接时,执行set names utf8mb4 ,示例代码如下:
仅需修改相应数据库表中需要存储特殊字符的字段字符集为utf8mb4,实例如下:
Notes:以上方法在每次遇到特殊字符引起的问题时都需要进行单独的修改,数据库中存在两种不同的字符集,不便于管理。因此,建议对整个数据库进行字符集的修改:(最好先做mysqldump备份)
领取专属 10元无门槛券
私享最新 技术干货