文档首页/ 云数据库 TaurusDB/ 常见问题/ 数据库基本使用/ 视图或者查询报错illegal mix of collation
更新时间:2026-03-19 GMT+08:00

视图或者查询报错illegal mix of collation

该报错常见于varchar等字符类型的列之间,或是这类字符列与字面量字符串(即SQL中直接输入的字符串)的比较,报错的原因是比较符号两边字符串的排序集(collation)不一致。

例如:

SELECT … WHERE (Column_Name = convert(date_format(curdate(),'%Y%m%d') using utf8mb4) …FROM Table_Name;
SELECT … WHERE (Column_Name=‘AAAAA’) …FROM Table_Name;

可以使用MySQL内置的COLLATION()函数,查看比较符号左右的表达式是否一致。

  • 使用COLLATION()函数查看表中某一字符类型列的排序集。
    SELECT COLLATION(column_name) FROM Table_Name LIMIT 1;
  • 使用COLLATION()函数查看常量或表达式的排序集。
    SELECT COLLATION(‘AAA’);
    SELECT COLLATION(convert(date_format(curdate(),'%Y%m%d') using utf8mb4));

当比较符号两边的字符collation不一致时,建议使用convert函数显式指定排序集直接调整其中一方的collation。由于直接convert表中字段可能会让索引失效,一般情况下建议优先修改常量。

如果

SELECT COLLATION(column_name) FROM Table_Name LIMIT 1;

结果为utf8mb4_general_ci。

SELECT COLLATION(‘AAAAA’);

结果为utf8mb4_0900_ci。

则需要将常量的字符串变为convert(‘AAAAA’using utf8mb4 )collate utf8mb4_general_ci

SQL变为:

SELECT … WHERE (column_name = convert(‘AAAAA’ using utf8mb4 )collate utf8mb4_general_ci) …FROM Table_Name;