mysql迁移到ob有部分语句查询报下面错误

【 使用环境 】生产环境
【 OB or 其他组件 】observer 3.2.5 oms 3.4.0
【 使用版本 】
【问题描述】mysql通过oms迁移到ob 部分查询语句报错
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT), (utf8mb4_general_ci,IMPLICIT)
原库表ddl:

迁移之后:

查询语句报错:
select
t.id as a ,t1.id as b
from account_center.merchant_base_info t
left join account_center.tr_consume_offline t1
on t.merchant_no = t1.acpt_id ;

改成之后不报错:
select
t.id as a ,t1.id as b
from account_center.merchant_base_info t
left join account_center.tr_consume_offline t1
on t.merchant_no = t1.acpt_id COLLATE utf8mb4_0900_ai_ci;

目前老业务中有大量类型的情况,改程序是不太可能的。
最终通过分析 default_collation_for_utf8mb4是可能是这个参数导致的,这个参数不支持修改取的值是utf8mb4_general_ci.
与utf8mb4_0900_ai_ci关联查询就会报错。
各位大佬有遇到过类型的情况吗。

1 个赞

字符集和collation最好统一。即便是不报错,也会导致隐式转换不能走索引

1 个赞

社区版没有ob325这个版本 企业版按照下面的方式找企业版支持
你好,你提的这个技术问题牵涉到OceanBase企业版范围内的功能细节;针对此类问题,建议你通过以下方式寻求帮助:

  1. 如你所在的企业客户已签署OceanBase企业版销售合同,请你联系客户经理;

  2. 如你所在的企业客户尚未签署OceanBase企业版销售合同,你可通过OceanBase官网商务咨询页面留下你的联系方式,OceanBase企业版的业务顾问会在一个工作日内与你联系。

另外,我们欢迎你使用社区版,并在论坛/社群中分享你对社区版本的想法、经验和问题,与其他社区成员共同交流。

mysql的字符集规则比较特殊, 实例字符集 ,库字符集 表字符集 列字符集

当表字符集和列的字符集不一致的情况下 , 列的字符集就会出现 字符集和编码规则 ,代表个性化设置的

还是先改源端吧。 这样一劳永逸

源端好多年前的业务,应用那边肯定不愿意改的

最终解决办法
oms工具修改参数
菜单路径:系统管理–》系统参数–》mysql_to_obmysql.collation.mapping
设置为
[{“collation”:“utf8mb3_general_ci”,“mappedCollation”:“utf8mb4_0900_ai_ci”}]

1 个赞