MySQL недопустимая смесь параметров сортировки для операции '=' на простой INSERT - PullRequest
0 голосов
/ 12 сентября 2018

Существует множество вопросов о смешивании сопоставлений в операторах SELECT и INSERT * SELECT. Мой простой INSERT, к которому ничего не добавлено, кроме данных.

Ошибка, возникшая в процессе:

Недопустимое сочетание параметров сортировки (utf8_unicode_ci, IMPLICIT) и (utf8_general_ci, IMPLICIT) для операции '='

Все имена полей и имена таблиц были упрощены. Выполняется запрос:

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

Он подготовлен для получения некоторых данных, которые вводятся процессом Java с помощью JDBI.

В базовых таблицах нет ничего странного. Их 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-мира, являются причиной этого? Может ли это быть связано с текущими переменными сеанса соединения?


UPDATE

Я забыл добавить версию MySQL: 5.6

Я решил эту проблему в своих тестовых прогонах, переместив все сопоставления полей в ПО УМОЛЧАНИЮ и сопоставление таблицы в utf8_general_ci на table1. Тем не менее, это неприемлемое решение проблемы, и оно не близко подходит к ответу , как может произойти смешивание параметров сортировки в простом операторе INSERT?

1 Ответ

0 голосов
/ 12 сентября 2018

Я нашел виновника. В этой таблице есть TRIGGER, который ссылается на другую таблицу из другой схемы. Конфликт существует в операторах триггера, что не помогает тому, что сообщение об ошибке не имеет никакого отношения к такому факту.

что отвечает

как в простом операторе INSERT может быть смешение параметров сортировки?

ВСТАВКА сопровождает ТРИГГЕР

...