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
.
Как решить такие проблемы?
Ответы
Ответ 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