在使用阿里云DataWorks进行数据集成往 MySQL 抽取数据时,如果源数据中包含表情符号,可能会被认为是脏数据。这是因为MySQL数据库默认的字符集是latin1,而表情符号一般会使用Unicode编码进行表示,如果直接将Unicode编码的表情符号存储到latin1字符集的MySQL数据库中,就会出现乱码。
可以通过如下两种方式来解决该问题:
修改MySQL数据库字符集:建议将MySQL数据库字符集修改为utf8mb4,utf8mb4是支持Unicode编码的字符集,可以正确存储表情符号。
在DataWorks中进行数据转换:在进行数据集成时,在MySQL数据源对象中添加如下代码,实现Unicode编码到utf8mb4编码的转换,比如:
SELECT CONVERT(column_name USING utf8mb4) FROM table_name;
在设计数据库表的字符集时,注意一下,不仅表要设置,有时候语句里面也有特定设置,注意优先级,不然会被覆盖掉。
如果全都显示设置了,那么优先级顺序是 SQL语句 > 列级别设置 > 表级别设置 > 库级别设置 > 服务器别设置。
以上方法解决不了从阿里云Maxcompute-->mysql的表情符导入的问题,网上的结论是传输工具DataX会把表情符做为脏数据处理掉,所以解决办法是把表情符给替换掉。
" 源头的 column 配置多了,当value类型为hash时,数据源的每行记录都需遵循相应的规范。即每行记录除key外,只能有1对attribute和value, 并且attribute必须在value前面,Redis Writer方可解析出column对应的是attribute或value。 按照用户意图,应该是column只保留3列,移除不需要的列。此回答整理自钉群“DataWorks交流群(答疑@机器人)”"
是的,如果数据中包括表情符,在同步过程中可能会报错脏数据:[13350975-0-0-writer] ERROR StdoutPluginCollector - 脏数据 {"exception":"Incorrect string value: '\xF0\x9F\x98\x82\xE8\xA2...' for column 'introduction' at row 1","record":[{"byteSize":8,"index":0,"rawData":9642,"type":"LONG"},}],"type":"writer"} 。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。