web-dev-qa-db-fra.com

MySQL Modifier une colonne ENUM valeur

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?

46
Sangram Anand

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,

  1. 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;
    
  2. Définissez l'ancienne valeur enum sur nouvelle valeur pour tous les enregistrements.

    UPDATE `content` set `pagetype` = 'FEATURED_COVERAGE' where
    `pagetype` = 'NEWS';
    
  3. 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;
    
96

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
5
Vatev

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.

2
georgecj11

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
1
alwaysLearn