2017-02-13 10 views
0

カラムを変更できる方法はありますか?テキストのデータ型をインデックスにドロップしないでください。 または任意mysql変数デフォルトの鍵長を指定するには、列のデータ型を変更している間にインデックス用のテキスト列がある場合。インデックスを削除せずにインデックス付き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; 

これらをさらに少ないステップで組み合わせることができます。

関連する問題