J'ai une table MySQL "content
" qui a une colonne page_type
de type ENUM
. Les valeurs de ENUM
sont NEWS
& PRESS_RELEASE
. J'ai besoin de remplacer NEWS
par FEATURED_COVERAGE
:
ALTER TABLE `content` CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
Mais maintenant, les enregistrements de la table, qui avaient précédemment le type page_type NEWS
, sont maintenant vides et je ne peux absolument pas identifier les enregistrements qui sont NEWS
, de sorte que je puisse les renommer en FEATURED_COVERAGE
.
Comment résoudre de tels problèmes?
Si j'ai bien compris votre question, vous souhaitez renommer la valeur d’énumération existante NEWS
en FEATURED_COVERAGE
. Si oui, vous devez suivre les étapes ci-dessous,
Modifiez le tableau et ajoutez la nouvelle valeur enum à la colonne, de sorte que vous disposiez de 3 enum
ALTER TABLE `content` CHANGE `pagetype` `pagetype`
ENUM('FEATURED_COVERAGE','PRESS_RELEASE', 'NEWS') CHARACTER SET utf8
COLLATE utf8_general_ci NOT NULL;
Définissez l'ancienne valeur enum sur nouvelle valeur pour tous les enregistrements.
UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
`pagetype` = 'NEWS';
Modifiez la table et supprimez l'ancienne valeur enum.
ALTER TABLE `content` CHANGE `pagetype` `pagetype`
ENUM('FEATURED_COVERAGE','PRESS_RELEASE') CHARACTER SET utf8 COLLATE
utf8_general_ci NOT NULL;
L'énumération de MySQL a toujours une option cachée qui vaut 0 en entier et '' en chaîne. Lorsque vous essayez d’affecter une valeur non valide, elle utilise la valeur cachée.
En supposant que toutes vos valeurs vides étaient 'NEWS' avant la mise à jour, vous pouvez les modifier avec
UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0
Je pense que défaut aurait pu aider.
ALTER TABLE `content`
CHANGE `pagetype` `pagetype` ENUM('FEATURED_COVERAGE','PRESS_RELEASE')
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULt 'FEATURED_COVERAGE';
Maintenant, vous devez aveuglément faire une mise à jour
Et n'utilisez jamais une colonne enum si votre ensemble de valeurs est en train de changer.
Puisque tu n’as changé que d’une énumération, ce ne sera pas difficile pour toi
Essayez d'utiliser ceci
UPDATE content SET pagetype = 'FEATURED_COVERAGE' WHERE pagetype = 0