2011-06-26 79 views
3

我有MySQL InnoDb表,我想存儲長(限制爲20k符號)字符串。有什麼辦法可以爲這個字段創建索引嗎?MySQL索引爲長字符串

+0

你使用文本作爲數據類型嗎? – Ibu

+0

我可以使用任何字符串數據類型 – SiberianGuy

+0

相關答案是[here](http://stackoverflow.com/questions/3489041/mysqlerror-specified-key-was-too-long-max-key-length-is-1000-bytes/3489331#3489331)和[there](http://stackoverflow.com/questions/1814532/1071-specified-key-was-too-long-max-key-length-is-767-bytes/1814594#1814594) 。 –

回答

3

您需要限制索引的長度,否則您可能會得到error 1071(「指定的密鑰太長」)。上CREATE INDEX MySQL手冊條目描述這一點:

索引可以被創建,只使用列值的前導部分,使用COL_NAME(長度)的語法指定的索引前綴長度:

  • 前綴可以爲CHAR,VARCHAR,BINARY和VARBINARY列指定。

  • BLOB和TEXT列也可以被索引,但必須給出前綴長度。

  • 對於非二進制字符串類型,以字節給出前綴長度,對於二進制字符串類型,以字節爲單位給出。也就是說,索引條目由CHAR,VARCHAR和TEXT列的每個列值的第一個長度字符以及BINARY,VARBINARY和BLOB列的每個列值的第一個長度字節組成。

它也增加了這一點:

前綴支持和前綴(如果支持)的長度是存儲引擎相關的。例如,對於MyISAM表,前綴可以長達1000個字節,對於InnoDB表,前綴可以長達767個字節。

8

您可以將該字段的MD5索引到另一個字段並將其索引。那麼當你做一個搜索你匹配與沒有索引的全部字段和md5字段。

+0

我們可以看一個例子嗎? – Divs