2017-02-13 60 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; 

您也許能夠將這些結合到更少的步驟中。