MySQL更改列ENUM值

San*_*and 47 mysql enums

我有一个MySQL表" content",它有一个page_type类型的列ENUM.该ENUM值是NEWS&PRESS_RELEASE.我需要替换NEWSFEATURED_COVERAGE:

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

但是现在表中的记录,前面有page_type NEWS现在是空的,我无法识别哪些记录NEWS,所以我可以将它们重命名为FEATURED_COVERAGE.

如何解决这类问题?

Abi*_*san 97

如果我理解您的问题,您想要将现有的枚举值重命名NEWSFEATURED_COVERAGE.如果是这样,您需要按照以下步骤操作,

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

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

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
    `pagetype` = 'NEWS';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 更改表并删除旧的枚举值.

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


Vat*_*tev 5

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

假设在更新之前所有空值都是"新闻",您可以使用它们进行更改

UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
Run Code Online (Sandbox Code Playgroud)