У меня есть таблица, а именно «теги». Структура которого выглядит следующим образом:
CREATE TABLE `tags` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_bin NOT NULL,
`value` varchar(255) COLLATE utf8_bin NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `tags_name_value_unique` (`name`,`value`),
KEY `tags_name_index` (`name`),
KEY `tags_value_index` (`value`)
) ENGINE=InnoDB AUTO_INCREMENT=1380 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Получение похожих ошибок для разных значений. Ошибка частая, но случайная
SQLSTATE [23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись 'screen_name-Erika S' для ключа 'tags_name_value_unique' (SQL: вставить в tags
(name
, value
, updated_at
, created_at
) значения (screen_name, Erika Söll, 2018-08-29 08:21:55, 2018-08-29 08:21:55))
В этом случае значение Erika Söll не присутствовало в БД, тогда как значение Erika S было доступно в БД. У меня есть следующие вопросы:
- Вставка выполняется со значением Erika Söll , так почему уникальное ограничение дает ошибку для Erika S ?
- Есть тысячи таких ошибок, и после их анализа кажется, что значение сопоставляется до появления любого немецкого символа, такого как ö, ü, ß и т. Д. Почему индексы ведут себя так?
- Это как-то связано с одновременным использованием ограничения уникальности и индекса? В этом случае сначала был создан индекс, а позже добавлено уникальное ограничение
- Как это можно исправить?
Запросы для выбора и вставки значений следующие:
select * from
теги where (
имя = 'screen_name' and
значение = 'Klaudia-Krauß') limit 1
insert into
метки (
имя ,
значение ,
updated_at ,
created_at ) values ('screen_name', 'Klaudia-Krauß', '2018-09-03 04:08:46', '2018-09-03 04:08:46')