MySQL更改列ENUM值

时间:2013-03-26 16:45:29

标签: mysql enums

我有一个MySQL表“content”,其中page_type列的类型为ENUMENUM值为NEWS& PRESS_RELEASE。我需要将NEWS替换为FEATURED_COVERAGE

ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

但是现在表中的记录(之前有page_type NEWS)现在是空的,我无法识别哪些记录是NEWS,因此我可以将这些记录重命名为{ {1}}。

如何解决此类问题?

4 个答案:

答案 0 :(得分:88)

如果我理解了您的问题,您希望将现有的枚举值NEWS重命名为FEATURED_COVERAGE。如果是这样,您需要按照以下步骤进行操作

  1. 更改表格并将新的枚举值添加到列中,这样您就会有3个枚举

    ALTER TABLE `content` CHANGE `pagetype` `pagetype`
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8
    COLLATE utf8_general_ci NOT NULL;
    
  2. 将旧枚举值设置为所有记录的新值。

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
    `pagetype` = 'NEWS';
    
  3. 更改表并删除旧的枚举值。

    ALTER TABLE `content` CHANGE `pagetype` `pagetype`
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE
    utf8_general_ci NOT NULL;
    

答案 1 :(得分:5)

MySQL的枚举总是有一个隐藏选项,0为整数,''为字符串。当您尝试分配无效值时,它将使用隐藏的值。

假设在更新之前所有空值都是“新闻”,您可以使用

更改它们
UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0

答案 2 :(得分:2)

我认为违约可能有所帮助。

ALTER TABLE `content`
CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') 
   CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULt 'FEATURED_COVERAGE';

现在你必须盲目地进行更新

如果您的值集发生变化,请不要使用枚举列。

答案 3 :(得分:1)

由于您只更改了一个枚举,因此对您来说并不困难

尝试使用此

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0