MySQL在使用UNION查询时或者创建视图时报:异常:SQL error: #1271 - Illegal mix of collations for operation ‘UNION’
这个错误意味着在UNION查询中的两个或多个列使用了不同的字符集或校对规则,导致无法进行正确的合并操作。
字符集和校对规则是用于决定如何比较和排序字符串的规则。不同的字符集和校对规则可能导致相同的字符串在某些情况下被视为相同,而在其他情况下被视为不同。因此,当UNION查询中的列使用不同的字符集或校对规则时,MySQL无法确定如何正确地合并这些列的结果,从而引发了#1271错误。
查看表的详细信息发现字符类型的字段的Collation不同
解决:
- 统一字符集和校对规则
ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
- 如果无法更改表的结构,或者不希望更改原有数据,可以在UNION查询中使用CONCAT函数来强制使用特定的字符集和校对规则:
SELECT CONCAT(column_name USING NCHAR_SEP) AS column_name FROM your_table_name UNION ALL SELECT CONCAT(column_name USING NCHAR_SEP) AS column_name FROM another_table;
USING NCHAR_SEP
指定了使用空字符(''
)作为分隔符来合并字符串。也可以根据需要选择其他合适的分隔符。
- 更改MySQL配置:
如果以上两种方法都不适用,还可以尝试更改MySQL服务器的配置来允许不同的字符集和校对规则。在my.cnf或my.ini配置文件中添加以下行:
[mysqld] collation-server = utf8_general_ci character-set-server = utf8
- 然后重启MySQL服务器以使更改生效。
请注意,这种方法会影响服务器上所有数据库和表的行为,因此请谨慎使用。
在实际应用中,最好在开发阶段就统一数据库中所有表和列的字符集和校对规则,以避免这类问题发生。