/ / Wie ändere ich einen indexierten varchar (100) in Text, ohne den Index zu löschen? - MySQL, SQL

Wie ändert man einen indexierten varchar (100) in Text, ohne den Index zu verlieren? - MySQL, SQL

Gibt es eine Möglichkeit, die Spalte zu ändern Name zu Text Datentyp, ohne den Index für die Spalte zu löschen. oder irgendein MySQL-Variable konkretisieren Standard-Schlüssellänge wenn es eine Textspalte für die Indexierung gibt, während der Datentyp der Spalte geändert wird.

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

Antworten:

1 für die Antwort № 1

Sie können keinen Index für eine TEXT Feld, ohne eine Schlüssellänge auf den Index zu setzen. Ihre aktuellen Indizes haben keine Schlüssellänge, daher können Sie sie nicht konvertieren TEXT bis Sie diese Indizes fallen lassen.

Sie können jedoch redundante Indizes erstellen, sodass Sie nie einen Moment ohne einen Index haben.

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;

Sie können diese auch in weniger Schritten kombinieren.