大字节写入数据到mysql出错_DataX:导入4字节UTF8编码(生僻字)到Mysql数据库的utf8mb4数据表-阿里云开发者社区...

在MySQL数据库中,utf8编码只支持3字节字符,而一些生僻字是4字节的。DataX在同步数据时遇到此类字符会报错。通过在jdbc连接参数中加入`com.mysql.jdbc.faultInjection.serverCharsetIndex=45`,可以解决DataX写入utf8mb4数据表的问题。同时,介绍了查看MySQL字符集的方法以及utf8mb4字符集的作用,它用于兼容4字节Unicode字符,包括Emoji和部分生僻字。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

MySql数据库的编码支持UFT8字符集。utf-8编码可能是2个字节、3个字节、4个字节的字符,MYSQL的utf-8编码,只支持3个字节的字符。汉字中很多生僻字都是4个字节的字符,日常生活中人的姓名就会有很多高位的生僻字。

如果直接使用datax同步数据到utf-8编码的数据库中,遇到高位字节的字符时,程序会抛异常。即便数据库中的表的字符集是设置为uft8mb4字符集。在datax异常日志中:

java.sql.BatchUpdateException:Incorrect string value:'xF0xA1x80x84' for column 'XXXX' at row 66.

如果在创建数据库实例的时候,就把实例创建成uft8mb4字符集,就不会出现这个问题。之前这个问题,datax是没有解决的,我都是通过重新创建数据库实例来实现。现在datax有方法可以解决这个问题,方法就是在jdbc配置中增加?com.mysql.jdbc.faultInjection.serverCharsetIndex=45。例如:

jdbc:mysql://ip:3306/testabc?com.mysql.jdbc.faultInjection.serverCharsetIndex=45

测试

建表语句

CREATE TABLE a (

name varchar(222) DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

;

测试json

{

"job": {

"setting": {

"speed": {

"channel": 1

}

},

"content": [

{

"reader": {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值