mysql版本差异导致的排序规则不一致关联查询报错

1.错误信息

项目上线之后进行业务验证时发现报错,报错如下:

1267 - Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and 
(utf8mb4_general_ci,IMPLICIT) for operation '='

2.错误分析

  1. 这个错误通常发生在MySQL数据库中,当你尝试比较或操作两个具有不同字符集或排序规则(collation)的列时。在这个特定的例子中,你正在尝试将utf8mb4_general_ci和utf8mb4_0900_ai两种排序规则下的数据进行比较或操作,这是不允许的。
  2. 因为我们项目之前使用的是mysql5.7版本,后来换成了mysql8.0所以出现了这个问题。
  3. MySQL 5.7和MySQL 8.0排序规则如下:
    • MySQL 5.7排序规则 (Collation):对于 utf8mb4 字符集,默认排序规则可能是 utf8mb4_general_ci
    • MySQL 8.0及之后的版本排序规则 (Collation):对于 utf8mb4 字符集,默认排序规则是 utf8mb4_0900_ai_ci
  1. 修改字符集sql如下:
ALTER TABLE user MODIFY name VARCHAR(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

3.解决错误:

  1. 知道了错误原因解决起来很容易,修改对应表的排序规则就行了,但是千万要注意修改之前需要分析与改表关联查询的其他表是否会有排序规则不一致的问题。切误因为解决当前查询包括而造成其他关联表查询报错

最后如果想查询表中字段使用的排序规则可以使用如下sql:

-- 查询xxx库中表和字段使用的排序规则
SELECT TABLE_NAME, COLLATION_NAME  FROM INFORMATION_SCHEMA.COLUMNS  WHERE TABLE_SCHEMA = 'xxx';
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值