2017-02-13 61 views
0

有没有办法我可以修改列名称文本数据类型没有删除列上的索引。 或任何MySQL的可变指定默认keylength时,有一个文本列索引而改变列的数据类型。如何改变一个索引的VARCHAR(100),而不删除索引的文本?

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

回答

1

你不能有一个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; 

您也许能够将这些结合到更少的步骤中。