侧边栏壁纸
  • 累计撰写 49 篇文章
  • 累计创建 29 个标签
  • 累计收到 6 条评论

目 录CONTENT

文章目录

【datax】数据推送到MySQL字符集错误

JHL&WWZ
2022-11-21 / 0 评论 / 0 点赞 / 673 阅读 / 444 字 / 正在检测是否收录...

背景:
使用datax工具将一张表从hive推送数据到mysql

报错:

Incorrect string value: '\\xF0\\xA5\\x96\\x84' for column 'user_name' at row

产生原因分析:
普通的字符串或者表情都是占位3个字节,所以utf8足够用了,但是移动端的表情符号占位是4个字节,普通的utf8就不够用了,为了应对无线互联网的机遇和挑战、避免 emoji 表情符号带来的问题、涉及无线相关的 MySQL 数据库建议都提前采用 utf8mb4 字符集,这必须要作为移动互联网行业的一个技术选型的要点。

解决方法:

1、暴力去掉特殊的表情符

content = content.replaceAll("[\\x{10000}-\\x{10FFFF}]", "");

2、改变字符集

ps:需要 >= MySQL 5.5.3版本、从库也必须是5.5的了、低版本不支持这个字符集、复制报错

修改表字段字符集为utf8mb4:

--修改数据库默认的字符集
--注意:虽然修改了database的字符集为utf8mb4,但只修改了database以后新创建的表的字符集,默认使用utf8mb4,原来已经存在的表,字符集不会变,需要手动为每张表设置字符集
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci


--修改表默认的字符集
--只修改表默认的字符集
ALTER TABLE table_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
--修改表默认的字符集和所有字符列的字符集
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4  COLLATE utf8mb4_general_ci

--修改字段默认的字符集
ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
0

评论区