Подтвердить что ты не робот

MySQL Изменить значение столбца ENUM

У меня есть таблица MySQL "content", которая имеет столбец page_type типа ENUM. Значения ENUM: 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, поэтому я могу переименовать их в FEATURED_COVERAGE.

Как решить такие проблемы?

4b9b3361

Ответ 1

Если я понимаю ваш вопрос, вы хотите переименовать существующее значение enum NEWS в FEATURED_COVERAGE. Если это так, вам нужно выполнить следующие шаги,

  • Измените таблицу и добавьте новое значение перечисления в столбец, чтобы у вас было 3 перечисления

    ALTER TABLE `content` CHANGE `pagetype` `pagetype`
    ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8
    COLLATE utf8_general_ci NOT NULL;
    
  • Задайте значение старого перечисления для нового значения для всех записей.

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
    `pagetype` = 'NEWS';
    
  • Измените таблицу и отбросьте значение старого перечисления.

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

Ответ 2

MySQL enum всегда имеет скрытую опцию, которая равна 0 как целое число и '' как строка. Когда вы пытаетесь присвоить недопустимое значение, он использует скрытый.

Предполагая, что все ваши пустые значения были "НОВОСТИ" перед обновлением, вы можете изменить их с помощью

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

Ответ 3

Я думаю, что по умолчанию могло бы помочь.

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

Теперь вам нужно слепо обновить

И никогда не используйте столбец перечисления, если ваш набор значений изменяется.

Ответ 4

Поскольку вы изменили только одно перечисление, вам будет нелегко

Попробуйте использовать

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