Sto riscontrando problemi con MySQL composto da chiave univoca.MySQL tronca l'indice univoco composto da 64 caratteri
Consiste di URL, valore intero e campo della data.
Ma quando provo ad inserire la riga, ottengo un'eccezione:
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'
Come si può vedere, indice composto è stato troncato da 64 caratteri, e per questo non è un unico più (I 'm il recupero dei dati da una fonte esterna una volta al giorno)
Ma il più confusione che il record è stato inserito, anche se un'eccezione sulla violazione del vincolo è stato gettato
C'era una domanda simile here, ma l'unico consiglio era di usare SHOW CREATE TABLE per scoprire la lunghezza effettiva dell'indice.
Mostra creare tabelle mostra questo:
| 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 |
Quindi, non vedo alcuna limitazione per la lunghezza degli indici.
Mille grazie a tutti, chi può dare un aiuto in merito a questo problema.
Hai mai trovato una soluzione al tuo problema? Abbiamo un problema simile con un indice univoco su un campo VARCHAR (255). Apparentemente JDBC/JPA lancia una MySQLIntegrityConstraintViolationException che include i primi 64 caratteri del valore di stringa che stiamo tentando di inserire. Tuttavia, l'inserimento dello stesso valore direttamente tramite MySQL Workbench funziona correttamente senza problemi. Questo mi porta a credere che potrebbe essere correlato a JPA o al driver JDBC. – tvirtualw
Abbiamo trovato una soluzione al nostro problema. Per impostazione predefinita, la raccolta MySQL non fa distinzione tra maiuscole e minuscole. I valori che abbiamo provato ad inserire nella nostra tabella avevano gli stessi caratteri ea volte differivano da una lettera in maiuscolo, l'altra in minuscolo. Come "abcd" e "aBcd". Con le regole di confronto predefinite causerà una violazione dell'indice univoca (credo sia la stessa per le chiavi primarie). L'abbiamo cambiato in utf8_bin e poi ha funzionato per noi. – tvirtualw