Ваш код работает на меня. Вот мой тестовый пример:
mysql> CREATE TABLE carmake (country ENUM('Canada', 'United States'));
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW CREATE TABLE carmake;
+---------+-------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+-------------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`country` enum('Canada','United States') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+-------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> ALTER TABLE carmake CHANGE country country ENUM('Sweden','Malaysia');
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> SHOW CREATE TABLE carmake;
+---------+--------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+---------+--------------------------------------------------------------------------------------------------------------------+
| carmake | CREATE TABLE `carmake` (
`country` enum('Sweden','Malaysia') default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+---------+--------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
Какую ошибку вы видите?
FWIW это также будет работать:
ALTER TABLE carmake MODIFY COLUMN country ENUM('Sweden','Malaysia');
Я бы порекомендовал таблицу стран, а не столбец enum. У вас могут быть сотни стран, которые могут составить довольно большой и неуклюжий список.
РЕДАКТИРОВАТЬ: Теперь, когда я вижу ваше сообщение об ошибке:
ERROR 1265 (01000): Data truncated for column 'country' at row 1.
Я подозреваю, что у вас есть некоторые значения в столбце вашей страны, которые не отображаются в вашем ENUM
. Каков вывод следующей команды?
SELECT DISTINCT country FROM carmake;
ДРУГОЕ РЕДАКТИРОВАНИЕ: Каковы выходные данные следующей команды?
SHOW VARIABLES LIKE 'sql_mode';
Это STRICT_TRANS_TABLES
или STRICT_ALL_TABLES
? Это может привести к ошибке, а не к обычному предупреждению, которое MySQL даст вам в этой ситуации.
ДАЙТЕ ДРУГОЕ РЕДАКТИРОВАНИЕ: Хорошо, теперь я вижу, что у вас определенно есть значения в таблице, которых нет в новом ENUM
. Новое определение ENUM
допускает только 'Sweden'
и 'Malaysia'
. В таблице есть 'USA'
, 'India'
и несколько других.
ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ (МОЖЕТ): Я думаю, что вы пытаетесь сделать это:
ALTER TABLE carmake CHANGE country country ENUM('Italy', 'Germany', 'England', 'USA', 'France', 'South Korea', 'Australia', 'Spain', 'Czech Republic', 'Sweden', 'Malaysia') DEFAULT NULL;