是否可以将列名称修改为text数据类型,而无需在列上删除索引。或任何mysql变量,当存在用于索引的文本列时,指定默认keylength,同时更改该列的数据类型。
mysql> show create table emp1;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| emp1 | CREATE TABLE `emp1` (
`name` varchar(100) DEFAULT NULL,
`id` varchar(10) DEFAULT NULL,
`date` date DEFAULT NULL,
KEY `index1` (`name`),
KEY `index2` (`id`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
mysql>
mysql>
mysql>
mysql>
mysql> alter table emp1 modify column name text;
ERROR 1170 (42000): BLOB/TEXT column 'name' used in key specification without a key length
发布于 2017-02-13 07:42:57
如果不在索引上设置键长度,TEXT字段上就不能有索引。当前索引没有键长度,因此在删除这些索引之前不能转换为TEXT。
但是您可以创建多余的索引,这样就不会有一刻没有索引了。
mysql> alter table emp1 add key index1_new (name(80));
mysql> alter table emp1 drop key index1;
mysql> alter table emp1 add key index2_new (id,name(80));
mysql> alter table emp1 drop key index2;
mysql> alter table emp1 modify column name text;您也可以将这些步骤合并成更少的步骤。
https://stackoverflow.com/questions/42198436
复制相似问题