繁体字生僻字数据库报错处理

问题

最近项目实施时部分繁体字生僻字入库测试时报错:

java.sql.SQLException: xxx.xxx.xxx.xxx:xxxx/schema1 | Incorrect string value: '\xF0\xA5\x96\x84' for column 'column_NAME' at row 1

其中:鱇輼緼  䲤㴝  顏艷詩媚陳㓇然刘㦤萱  鿇鿈鿉鿊鿋     入库正常。

𥖄  𥒚𦬣𩺰   𥖄𧝁  𤅡𣉞𢒼     入库报错!

解决方案:

1、检查mysql数据库版本:mysql数据库版本为5.7 ,支持 utf8mb4字符集;------满足要求

2、检查表和字段的字符集:表字符集默认为:utf8mb4,“DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin”------满足要求。

   注意要去设置mysql数据库默认的字符集。

3、应用侧部分繁体字仍然报错解决方法:

方式1、升级到 mysql-connector-java驱动 到 5.1.47;

java:

<dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
</dependency>

同时url里增加字符集设置characterEncoding=utf8: url="jdbc:mysql://xxx.xxx.xxx.xxx:xxxx/test?characterEncoding=utf8"

方式2:
通过 set names 命令设置会话字符集
String sqlCharset = "set names utf8mb4"
Statement statment = conn.createStatement();
resultSet = statment.executeQuery(sqlCharset);

每次执行sql前执行上述操作。

 

简单说 utf8mb4 是 utf8 的超集并完全兼容utf8,能够用四个字节存储更多的字符。
标准的 UTF-8 字符集编码是可以用 1~4 个字节去编码21位字符,这几乎包含了是世界上所有能看见的语言了。然而在MySQL里实现的utf8最长使用3个字节,也就是只支持到了 Unicode 中的 基本多文本平面(U 0000至U FFFF),包含了控制符、拉丁文,中、日、韩等绝大多数国际字符,但并不是所有,最常见的就算现在手机端常用的表情字符 emoji和一些不常用的汉字,如 “墅” ,这些需要四个字节才能编码出来。
也就是当你的数据库里要求能够存入这些表情或宽字符时,可以把字段定义为 utf8mb4,同时要注意连接字符集也要设置为utf8mb4。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值