我有如下表:的MySQL的MyISAM - 無法將新列添加到表
mysql> show create table keyword_links\G
*************************** 1. row ***************************
Table: keyword_links
Create Table: CREATE TABLE `keyword_links` (
`keyword_id` int(11) NOT NULL AUTO_INCREMENT,
`keyword` tinytext NOT NULL,
`link` tinytext,
`weight` smallint(6) NOT NULL DEFAULT '0',
`class_id` smallint(6) NOT NULL DEFAULT '0',
`category_id` smallint(6) NOT NULL DEFAULT '0',
`timestamp` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`keyword_id`),
KEY `class_id` (`class_id`),
KEY `category_id` (`category_id`),
KEY `idx_keyword` (`keyword`(333))
) ENGINE=MyISAM AUTO_INCREMENT=5082 DEFAULT CHARSET=utf8
到我試圖添加新列,這是失敗的:
mysql> ALTER TABLE keyword_links ADD COLUMN list_id INT UNSIGNED NOT NULL DEFAULT 0;
ERROR 1170 (42000): BLOB/TEXT column 'keyword' used in key specification without a key length
keyword
列的索引確實有一個333的關鍵長度,那爲什麼它失敗了,以及如何解決它?
UPDATE
我試圖減少從333到255的keyword
列的索引的大小,現在我可以添加成功新列:
ALTER TABLE keyword_links DROP INDEX idx_keyword;
CREATE INDEX index_keyword ON keyword_links (keyword(255));
ALTER TABLE keyword_links ADD COLUMN list_id INT UNSIGNED NOT NULL DEFAULT 0;
但我願意想知道發生了什麼事。
創建索引時,MySQL不會發生抱怨,這真的很奇怪。當我做'CREATE INDEX index_keyword ON keyword_links(關鍵字(333));'它沒有給出任何錯誤或警告。只有當我試圖向表中添加新列時,它纔會發生錯誤。 – arun 2013-02-16 02:48:55