Changer la longueur maximale d'une colonne varchar?


188

J'essaie de mettre à jour la longueur d'une colonne varchar de 255 caractères à 500 sans perdre le contenu. J'ai déjà supprimé et recréé des tables, mais je n'ai jamais été exposé à l'instruction alter qui est ce que je pense que je dois utiliser pour ce faire. J'ai trouvé la documentation ici: ALTER TABLE (Transfact-SQL) mais je ne peux pas en faire la tête ou la queue.

J'ai ce qui suit jusqu'à présent (essentiellement rien malheureusement):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

Comment aborder cela? Existe-t-il une meilleure documentation pour cette déclaration (j'ai fait quelques recherches pour un exemple de déclaration mais je suis restée vide)?

Réponses:


362

Vous avez besoin

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

Mais n'oubliez pas de spécifier NOT NULLexplicitement si vous le souhaitez.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

Si vous ne le spécifiez pas comme ci-dessous ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Ensuite, la colonne autorisera par défaut les valeurs nulles même si elle a été initialement définie comme NOT NULL. c'est-à-dire que l'omission de la spécification dans un ALTER TABLE ... ALTER COLUMNest toujours traitée comme.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

Ce comportement est différent de celui utilisé pour les nouvelles colonnes créées avec ALTER TABLE(ou au CREATE TABLEmoment). Là, la nullité par défaut dépend des ANSI_NULL_DFLTparamètres.


Pourriez-vous expliquer le but d'ajouter «[NOT] NULL» ici? Juste des curiosités, pourquoi votre réponse avait-elle une réponse de Mitch non?
— Michael A


Ainsi, [NOT NULL] spécifie que les valeurs NULL ne peuvent pas être placées dans la colonne?
— Michael A

3
@Michael - Sans les crochets, oui. Les crochets indiquent que le bit de syntaxe est facultatif. Si vous l'omettez, autoriser NULLest la valeur par défaut.
— Martin Smith

1
trié :) .. ALTER COLUMN MY_COL SET DATA TYPE VARCHAR (100)
— Kdean571

26

L'augmentation de la taille de la colonne avec ALTERne perdra aucune donnée:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Comme le souligne @Martin, n'oubliez pas de spécifier explicitement NULL | NOT NULL


14

Vous pouvez utiliser modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
C'est ce qui était déjà affiché. Y a-t-il quelque chose de nouveau que vous aimeriez partager?
— Nico Haase

Cela fonctionne aussi pour MySQL et cette question est taguée [TSQL] donc elle est au mauvais endroit
— jean

6
MODIFY est ce qui est nouveau. ALTER COLUMN m'a donné une erreur de syntaxe mais MODIFY COLUMN a fonctionné pour moi sans problème.
— KGBird

@KGBird - parce que vous n'utilisez pas SQL Server. MODIFYest la syntaxe pour un autre système de base de données que la question était sur
— Martin Smith

1

En utilisant les outils Maria-DB et DB-Navigator dans IntelliJ, MODIFY Column a fonctionné pour moi au lieu d' Alter Column


2
Qu'est-ce que ce message ajoute à la réponse fournie par @Mitch Wheat le 12 janvier 12 à 1:37?
— scopchanov

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

En retard à la question - mais j'utilise Oracle SQL Developer et la réponse de @ anonymous était la plus proche mais continuait à recevoir des erreurs de syntaxe jusqu'à ce que j'édite la requête à cela.

J'espère que cela aide quelqu'un


(modifié modifier pour modifier et pas besoin de définir nom_colonne comme colonne)
— Jett

0

J'avais aussi au-dessus de tout doute, ce qui a fonctionné pour moi est

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  

0

Cela a fonctionné pour moi dans db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);

0

Vous pouvez également enregistrer les anciennes données et créer une nouvelle table avec de nouveaux paramètres.

voir l'image

Dans SQL Server Management Studio: "votre base de données" => tâche => génère des scripts => sélectionnez un objet de base de données spécifique => "votre table" => avancé => types de données à script - schéma et données => générer

Personnellement, je l'ai fait.


-1

Pour MariaDB, utilisez la colonne de modification :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Ça va marcher.


La question concerne le serveur SQL
— Martin Smith le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.