2012-12-25 17 views
14

voglio fare una tabella in MySQL server con mediumtext colonna come UNIQUE KEYcolonna di testo make come unica chiave

CREATE TABLE `parts` (
     `id` int(11) NOT NULL AUTO_INCREMENT, 
     `name` mediumtext NOT NULL, 
     `display_status` int(11) NOT NULL, 
     UNIQUE KEY `name` (`name`), 
     PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

ma questo ha commesso un errore

BLOB/TEXT column 'name' used in key specification without a key length 

quando cambio il tipo di `nome `a varchar .. funziona!

si può dire se posso fare colonna di testo come UNIQUE KEY

grazie :)

+1

Eventuali duplicati: http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length – Tarek

+0

grazie @Tarek ma questa soluzione costringermi per usare varchar .. e voglio usare un tipo permettimi di inserire stringhe più lunghe di 255 caratteri –

+0

Puoi aggiungere una lunghezza, come 'UNIQUE KEY' name' ('name' (100)),' se i primi 100 fossero unico. –

risposta

14

Fondamentalmente non è possibile utilizzare la colonna Text come chiave UNIQUE. Perché praticamente una colonna così grande non sarà unica e potrebbe esserci una possibilità di più duplicati. Quindi, vai per il metodo hashing e usa quell'output come un vincolo UNIQUE.

Spero che questo ti aiuta

+0

grazie ... questa è una buona idea. –

+3

Nota che tecnicamente questa non è una soluzione, perché due valori di testo diversi possono generare lo stesso hash, ovvero una [collisione di hash] (http://en.wikipedia.org/wiki/Collision_ (computer_science). per mantenere i valori univoci dovresti memorizzare anche l'intera stringa e * non * avere un indice univoco sulla colonna hash – Bohemian

+0

Ecco una risposta più profonda per chi vuole veramente capire perché mysql si comporta in questo modo: https: // stackoverflow.com/a/1827099/5677103 –

16

Il limite di 255 per la lunghezza varchar non più applicabile. Da documentation:

I valori nelle colonne VARCHAR sono stringhe di lunghezza variabile. La lunghezza può essere specificata come valore da 0 a 255 prima di MySQL 5.0.3 e da 0 a 65.535 in 5.0.3 e versioni successive.

indici univoci devono avere una lunghezza massima conosciuta (un requisito di MySQL per la sua implementazione interna), in modo da utilizzare VARCHAR con un valore sufficiente per soddisfare il vostro valore atteso più lungo, ad esempio

... 
`name` varchar(65535) NOT NULL, -- for example 
... 
+0

oh bello ... grazie http://dev.mysql.com/doc/refman/5.0/en/char.html –

+0

Controlla anche questo: http://dev.mysql.com/doc/refman/5.0/ en/column-count-limit.html –

Problemi correlati