数据回流表情符问题处理

问题:sqoop回流数据到mysql时,emoji表情符无法导入异常。

异常信息:Caused by: java.io.IOException: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x86\x95' for column 'address' at row 6

1 表情符回流条件

表情符回流需满足以下条件:

  1. sqoop低版本mysql连接驱动包不支持utf8mb4,需升级到5.1.47及以上版本

  2. 回流数据库、表、字段编码格式需设置为utf8mb4
  3. sqoop回流时,mysql数据库连接url需加上‘useUnicode=true&characterEncoding=UTF-8’指定编码格式,设置为utf8mb4是不支持的。高版本连接驱动包当参数设置为UTF8/UTF-8的时,会直接映射到utf8mb4。

2 测试

2.1 升级jar包

cp mysql-connector-java-5.1.48.jar $SQOOP_HOME/lib

2.2 修改脚本

sqoop export --connect "jdbc:mysql://$HOSTNAME:$PORT/$DBNAME?tinyInt1isBit=false&useUnicode=true&characterEncoding=UTF-8" \
--username $username --password $password --table $target_table --fields-terminated-by '\001' --input-null-string '\\N' --input-null-non-string '\\N' --export-dir $hdfs_temp_dir &&

注:加粗字体为修改部分

2.3 修改字段编码格式

默认需dba将库编码格式修改为utf8mb4。

建表时需指定表及相关字段编码格式为utf8mb4。

修改字段编码格式示例:

ALTER TABLE sync_shop_test_d CHANGE address address VARCHAR(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值