有没有一种快速简便的方法将varchar / char转换为枚举?我试图这样做,但它不起作用
alter table zipcodes add column state_short_enum enum(
(select state_short from zipcodes group by state_short)
)
我收到此错误:
#1064 - You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
'(select state_short from zipcodes group by state_short))' at line 1
答案 0 :(得分:1)
枚举值必须是文字,因此您不能使用用户变量或标量子查询。可能您必须将ALTER
语句创建为字符串。
示例:
SET @codes := CONCAT((SELECT GROUP_CONCAT(CONCAT("'", state_short, "'")) FROM zipcodes), "'");
SET @alter_sql := CONCAT('ALTER TABLE `zipcodes` ADD `state_short_enum` ENUM(', @codes, ')');
PREPARE stmt FROM @alter_sql;
EXECUTE stmt;
答案 1 :(得分:0)
我知道,这已经是过时的问题,但我在尝试解决类似的问题时发现了它。在MySQL版本8.0中,有一个“procedure analyse”,它易于使用:
select * from t procedure analyse()\G
并在“Optimal_fieldtype”列中为您提供最佳字段类型。您可以直接在alter:
中使用此结果alter table t change column col1 enum(...) not null;
当然,在进行更改之前应该采取所有预防措施(进行备份,确保在更改期间保持在桌面上的锁定不会破坏正常活动)。