MySQL SQL error: #1271 - Illegal mix of collations for operation ‘UNION‘

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服务器以使更改生效。

    请注意,这种方法会影响服务器上所有数据库和表的行为,因此请谨慎使用。

在实际应用中,最好在开发阶段就统一数据库中所有表和列的字符集和校对规则,以避免这类问题发生。

  • 21
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

讓丄帝愛伱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值