Informatica解决MySQL字符集不一致导致推送数据失败问题

业务场景

当我们在使用 Informatica 将 MySQL 8 中的数据推送至 MySQL 5.7 中时,发现有些字段数据推送失败,通过检查 infa 中字段名字和映射都没问题。这时候就得注意是否是因为数据库版本不兼容的问题。列如以下这种情况:
在MySQL 8 版本中默认使用utf8mb4\utf8mb4_0900_ai_ci,而在 MySQL 5.7 中的默认字符集是 utf8_general_ci。而字符集 utf8mb4_0900_ai_ci 是 MySQL 8 中特有的,MySQL 5.7版本是不支持这个字符集的。因此当你在将 MySQL 8 中的数据推送至 MySQL 5.7 时,就会出现 MySQL 8 中字符集为 utf8mb4_0900_ai_ci 的字段数据推送失败。

解决方案

修改 MySQL 8 版本的字符集

首先是最简单的一种解决方案,修改 MySQL 8 版本的字段字符集,让高版本的 MySQL 能够兼容低版本的 MySQL。

升级低版本的 MySQL 数据库

将 MySQL 5.7 升级为 MySQL 8 版本

取数时修改数据字符集

其次,针对一些特殊场景,因为业务需要必须使用到 MySQL 8 版本的utf8mb4_0900_ai_ci 字符集并且不能够修改 MySQL 8 中的字符集,又因为现有的MySQL5.7 数据存储量已经非常大了,如果升级迁移数据难免会发生一些未知问题,但是我们又必须将这些数据存入咱们的低版本数据库中。这时候前两种方案就不适用了。
这时我们可以考虑在取 MySQL 8 数据库中的数据时做一些处理。MySQL中有一个函数就可以帮我们解决这个问题:

CONVERT(需要转换的字段 USING utf8mb4) COLLATE utf8mb4_bin AS '字段重命名'

我们只需要在infa中将这句字符集转换添加到对应的字段上即可大功告成。下列是我的示范sql语句:

SELECT 
  b.company_id, 
  CONVERT(b.company_name USING utf8mb4) COLLATE utf8mb4_bin AS 'company_name', 
  CONVERT(b.company_code USING utf8mb4) COLLATE utf8mb4_bin AS 'company_code', 
  b.is_supplier, 
  b.is_purchaser, 
  b.is_foreign_company, 
  b.tyc_id, 
  b.created_time, 
  b.update_time 
FROM 
  b

这里我将从 MySQL 8 中取出的字符集为 utf8mb4_0900_ai_ci 的数据转换为了字符集为 utf8mb4_bin 的数据,这样我们就能正常推送至 MySQL5.7 中了。
在这里插入图片描述
在这个里面将我们的sql语句替换上去即可,再点击应用并确定即可,接下来运行我们的工作流就可以看到数据已经成功推送过去了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

追风少年浪子彦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值