[Mysql]mysql数据库的sql语句中不同字段比较时字符集校对规则(Collation)不匹配解决办法

这个错误是由于MySQL中字符集校对规则(Collation)不匹配导致的。具体来说,在比较或操作两个字段时,它们的Collation不一致(一个是utf8mb4_general_ci,另一个是utf8mb4_0900_ai_ci),导致无法直接进行比较。


解决方法

方法1:临时转换字段的Collation(推荐)

在查询时,使用COLLATE关键字将其中一个字段的Collation转换为与另一个相同。例如,将user_name转换为utf8mb4_0900_ai_ci

WITH temp_xh_ids (id) AS (
    SELECT user_name 
    FROM sys_user 
    WHERE sflx_type = 1 
      AND create_time > '2025-09-01 00:00:00'
      AND user_name COLLATE utf8mb4_0900_ai_ci LIKE '2025%'  -- 转换Collation
      AND ykt_bind_status = 1
)

方法2:修改表字段的Collation(永久解决)

直接修改表结构,统一字段的Collation(需谨慎,可能影响其他查询):

ALTER TABLE sys_user MODIFY user_name VARCHAR(255) COLLATE utf8mb4_0900_ai_ci;

或统一为utf8mb4_general_ci

ALTER TABLE sys_user MODIFY user_name VARCHAR(255) COLLATE utf8mb4_general_ci;

方法3:修改数据库/表默认Collation

如果整个表或数据库的Collation不统一,可以修改默认设置:

ALTER TABLE sys_user CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;

建议

  1. 优先使用方法1(临时转换),避免直接修改表结构可能带来的风险。
  2. 检查表结构中相关字段的Collation是否一致:
    SHOW FULL COLUMNS FROM sys_user;
    
  3. 确保后续建表时统一使用相同的字符集和校对规则(如utf8mb4_0900_ai_ci)。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容