У меня проблемы с составленным уникальным ключом MySQL.
Он состоит из URL, целочисленного значения и поля даты.
Но когда я пытаюсь вставить строку, я получаю исключение:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'http://cars.auto.ru/cars/used/sale/16152870-c13f1.html-2012-02-1' for key 'one_a_day_idx'
Как видите, составной индекс был усечен до 64 символов, и из-за этого он больше не является уникальным (я получаю данные из внешнего источника один раз в день)
Но самое запутанное, что запись была вставлена, хотя было брошено исключение о нарушении ограничения
Был похожий вопрос здесь , но единственным советом было использовать SHOW CREATE TABLE, чтобы узнать фактическую длину индекса.
Показать создание таблиц показывает это:
| auto_ru_sale | CREATE TABLE `auto_ru_sale` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`template` int(11) NOT NULL,
`region` varchar(128) NOT NULL,
`URI` varchar(128) NOT NULL,
`subType` varchar(128) NOT NULL,
`cost` int(11) NOT NULL,
`productionYear` int(11) NOT NULL,
`engineVolume` int(11) NOT NULL,
`transmitionType` varchar(1) NOT NULL,
`run` int(11) NOT NULL,
`evaluationDate` date NOT NULL,
PRIMARY KEY (`ID`),
UNIQUE KEY `one_a_day_idx` (`template`,`URI`,`evaluationDate`),
KEY `prodyear_idx` (`productionYear`),
KEY `evdate_idx` (`evaluationDate`),
CONSTRAINT `auto_ru_sale_ibfk_1` FOREIGN KEY (`template`) REFERENCES `auto_ru_
datatemplate` (`ID`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=127012 DEFAULT CHARSET=utf8 |
Итак, я не вижу никаких ограничений на длину индекса.
Большое спасибо всем, кто может помочь с этой проблемой.