2013-03-18 62 views
2

是否有將varchar/char轉換爲枚舉的簡單方法?我試圖做到這一點,但它不工作將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 

回答

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; 
0

我知道,這是已經過時了的問題,但我發現它試圖解決同樣的問題。在MySQL 8.0高達版本有一個「procedure analyse」,這是很容易使用:

select * from t procedure analyse()\G 

和它給你的‘Optimal_fieldtype’列最佳字段類型。您可以直接在ALTER使用這個結果:

alter table t change column col1 enum(...) not null; 

當然所有的預防措施應該做的改變之前進行(使備份,確保鎖定ALTER期間表中保存不會破壞正常活動)。