У меня есть следующая таблица: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
Я попытался уменьшения размера индекса на keyword
колонки от 333 до 255, и теперь я могу добавить новый столбец успешно:
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