2012-12-25 39 views
14

我想打一個表中MySQL服務器mediumtextUNIQUE KEY使文本列作爲唯一鍵

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; 

,但是當我改變'名稱的類型此犯了一個錯誤

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

`varchar ..它的工作原理!

你能告訴我能不能使文字列作爲唯一鍵

謝謝:)

+1

可能重複:http://stackoverflow.com/questions/1827063/mysql-error-key-specification-without-a-key-length – Tarek

+0

感謝@Tarek但這種解決辦法逼我使用varchar ..,我想要使用一個類型允許我插入超過255個字符的字符串 –

+0

如果前100個是'UNIQUE KEY'name'('name'(100))',你可以添加一個長度獨特。 –

回答

14

基本上您不能使用Text列作爲UNIQUE密鑰。因爲實際上這樣一個大的專欄不會是獨一無二的,並且可能有更多重複的機會。因此,請去hashing方法並使用該輸出作爲UNIQUE約束。

希望這有助於你

+0

謝謝...這是一個不錯的主意。 –

+3

請注意,從技術上講,這不是一個解決方案,因爲兩個不同的文本值可能會生成相同的散列 - 即[散列衝突](http://en.wikipedia.org/wiki/Collision_(computer_science)。保持值的唯一性,你將不得不存儲整個字符串,*不*在散列列上有唯一的索引。 – Bohemian

+0

以下是誰想要真正理解爲什麼mysql的行爲如此的更深層的答案:https:// stackoverflow.com/a/1827099/5677103 –

16

的255 VARCHAR長度的限制不再適用。來自documentation

VARCHAR列中的值是可變長度的字符串。在MySQL 5.0.3之前,長度可以指定爲0到255之間的值,5.0.3和更高版本中的長度可以爲0到65,535。

唯一索引必須有一個已知的最大長度(MySQL的的要求,由於其內部實現),因此使用VARCHAR具有足夠大的值,以滿足您最長的期望值,例如

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

噢很好...謝謝http://dev.mysql.com/doc/refman/5.0/en/char.html –

+0

請檢查這一點:http://dev.mysql.com/doc/refman/5.0/ en/column-count-limit.html –