【mysql数据库】报错解决:ERROR StdoutPluginCollector - 脏数据: {“exception“:“Incorrect string value: ‘\\xF0\\x9

00.序言

发现mysql库里面的表和maxcompute里面的表条数不一样,找了半天发现是导入数据的时候有脏数据,被忽略了..

 

01.问题

从问题日志里发现:
ERROR StdoutPluginCollector - 脏数据: 
{"exception":"Incorrect string value: '\\xF0\\x9F\\x92\\x94' for column 'conntent' at row 1"

 

 02.解决方案

因为内容里面有emoji表情包,所以普通的utf-8进不去。

utf-8 是变化长度的编码,储存需要1~4个字节
然而,mysql的utf8只存储最多3个字节。所以有些字符存不进去,像emoji表情等。
为了兼容4字节,MySQL在5.5.3之后增加了这个utf8mb4的编码。
建库,建表时,强烈建议编码使用utf8mb4。

在设计数据库表的字符集时,注意一下,不仅表要设置,有时候语句里面也有特定设置,注意优先级,不然会被覆盖掉。


ALTER TABLE `ads_vos_social_data` 
    MODIFY COLUMN `content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL AFTER `title`;

 优先级:

如果全都显示设置了,那么优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 服务器别设置

03.总结

以上方法解决不了从阿里云Maxcompute-->mysql的表情符导入的问题,网上的结论是传输工具DataX会把表情符做为脏数据处理掉,所以解决办法是把表情符给替换掉。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值