MySQL在简单的INSERT上非法混合使用排序规则'='

时间:2018-09-12 08:27:23

标签: java mysql jdbi

SELECTINSERT * SELECT语句中,有很多关于排序规则混合的问题。我的是一个简单的INSERT,除了数据之外,什么也没有添加。

该过程中产生的错误是:

  

操作'='的归类(utf8_unicode_ci,IMPLICIT)和(utf8_general_ci,IMPLICIT)的非法混合

所有字段名称和表名称均已简化。正在执行的查询是:

INSERT INTO table1 (`a`,`b`,`c`,`d`,`e`,`f`,`g`,`h`,`i`,`j`) VALUES (?,?,?,?,?,?,?,?,?,?);```

已经准备好使用JDBI接收Java进程带来的一些数据。

基础表对此并不奇怪。它们的DDL如下所示。

CREATE TABLE `table1` (
  `a` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `b` varchar(6) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `d` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `e` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `f` int(11) DEFAULT NULL,
  `g` text COLLATE utf8_unicode_ci,
  `h` bigint(20) DEFAULT NULL,
  `i` bigint(20) DEFAULT NULL,
  `j` datetime DEFAULT NULL,
  `k` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`a`,`e`),
  KEY `c` (`c`,`d`),
  CONSTRAINT `fk_1` FOREIGN KEY (`a`) REFERENCES `table2` (`a2`),
  CONSTRAINT `fk_2` FOREIGN KEY (`c`, `d`) REFERENCES `table3` (`a3`, `b3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `table2` (
  `a2` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
  `b2` varchar(32) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c2` mediumtext COLLATE utf8_unicode_ci,
  `d2` mediumtext COLLATE utf8_unicode_ci,
  `e2` bigint(11) DEFAULT '0',
  PRIMARY KEY (`a2`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

CREATE TABLE `table3` (
  `a3` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `b3` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`a3`,`b3`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

可以看出,我所能理解的整理完全没有。来自Java世界的数据是否可能导致这种情况?可能与当前的连接会话变量有关吗?


更新

我忘记添加MySQL版本:5.6

我已经在测试运行中解决了这个问题,将所有字段归类移至 DEFAULT ,并将表归类移至utf8_general_ci上的table1。但是,这是无法解决该问题的解决方案,并且无法回答在简单的INSERT语句中如何存在排序规则混合?

1 个答案:

答案 0 :(得分:0)

我找到了罪魁祸首。该表上有一个TRIGGER,它引用了另一个模式中的另一个表。触发器语句中存在冲突,这不能帮助错误消息没有暗示这种事实。

答案

  

在简单的INSERT语句中怎么会有排序规则混合?

INSERT附带一个触发器