[问题解决方案]Illegal mix of collations for operation ‘UNION‘,

“UNION”操作的非法排序规则混合

  • 问题出现原因(UNION中的对应属性排序规则不一致)
    • 排序规则是什么
  • 问题展示
  • 问题排查与解决方式
    • 1. 同级比对
    • 2. 通过建表sql观察比对
    • 3. 特殊的地方
      • 新版本的建表语句
      • 旧版本的建表语句
    • 比较好用的解决方式

问题出现原因(UNION中的对应属性排序规则不一致)

‘UNION’查询的多个表中相对应属性排序规则(COLLATE)不是一个所以出现了这个问题。
首先字面意思为 : “UNION”操作的非法排序规则混合。结合百度已有的博主解决方案来一起分析此问题为 表属性的排序规则(COLLATE) 字段不一致。也就是 **(UNION)查询的俩个表中相对应属性的排序规则(COLLATE)不是一个所以出现了这个问题。**也就是下图中的排序规则。

排序规则是什么

图中第三栏。
[问题解决方案]Illegal mix of collations for operation ‘UNION‘,_第1张图片
mysql的排序规则

问题展示

俩个不同表中相对应属性字段排序规则不一致。
[问题解决方案]Illegal mix of collations for operation ‘UNION‘,_第2张图片
[问题解决方案]Illegal mix of collations for operation ‘UNION‘,_第3张图片
图片摘自https://www.cnblogs.com/sunnyguo/p/12484704.html

问题排查与解决方式

1. 同级比对

使用mysql工具,UNION中的多个表的相对应属性排序规则一个一个比较看下。这个适应与比较少的属性。如果属性太多的话太耗费时间和精力。

2. 通过建表sql观察比对

将UNION中的多个表有相对应属性的建表sql拿出来比对。基本可以一眼看到区别。

show create table 表名;

3. 特殊的地方

楼主是因为更换了navicat版本后新建的一个表与之前版本生成的表UNION,建表语句中会有区别,一般mysql都会有默认的字符集和排序规则,可以把新建表语句中的COLLATE删掉重新创建。当然也可以尝试修改旧表中的字段属性加上COLLATE。

新版本的建表语句


CREATE TABLE `tb_name` (
  `p_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `companycode` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
  `ctime` bigint(20) NOT NULL DEFAULT '0',
  `utime` bigint(20) NOT NULL DEFAULT '0',
  `yn` enum('y','n') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'y',
  PRIMARY KEY (`p_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

旧版本的建表语句

CREATE TABLE `tb_name` (
  `p_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100)  NOT NULL DEFAULT '',
  `companycode` varchar(100)  NOT NULL DEFAULT '',
  `ctime` bigint(20) NOT NULL DEFAULT '0',
  `utime` bigint(20) NOT NULL DEFAULT '0',
  `yn` enum('y','n')  NOT NULL DEFAULT 'y',
  PRIMARY KEY (`p_id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8

比较好用的解决方式

将表的编码格式和排序规则修改一致即可。

alter table tb_name convert to character set utf8 collate utf8_general_ci;

希望本文可以帮到你。

你可能感兴趣的:(mysql,mysql,sql)