Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】v7.1.1
【复现路径】使用Mybatis,使用 where in (#{txIds}), jdbc 连接串的charset encoding 是UTF-8, 表定义是默认的utf8mb4, collation 也是默认的 utf8mb4_bin
【遇到的问题:一个查询语句报错:

### Cause: java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8mb4_general_ci,COERCIBLE) for operation '='

触发这个问题的直接原因是错误地使用了Mybatis list 动态参数的用法。但是这里有几个疑惑:

  1. 为什么我用的明明是in,但是报错信息是operation ‘=’
  2. 我的表表定义是默认的utf8mb4, collation 也是默认的 utf8mb4_bin, 但是报错信息是utf8_general_ciutf8mb4_general_ci
    【附件:截图/日志/监控】

方便给出结构 和 sql 语句么?

最好也给一下 explain sql

2 个赞

直接原因处理后,还出现这个问题么?

2 个赞

抓下真实执行的sql

1 个赞

sql语句贴出来看看

1 个赞

方便贴下sql吗

1 个赞

查询语句是啥?

1 个赞

sql和建表语句给一下吧,这个就是单纯的字符集转换问题

1 个赞

自己终结这个话题,是因为我们组的测试把测试环境的数据库字符集和Collation 改成了utf8mb3了,辛苦各位

:yum:原来是乌龙,记得自己标记最佳答案

2 个赞

居然是乌龙一场

:sweat_smile::sweat_smile::sweat_smile:

btw, 从 #### TiDB 7.2.0,支持指定 utf8mb3 字符集

1 个赞

有理有据 :+1: :+1: :+1:

1 个赞

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。