Comment changer le type de données d'une colonne dans MySQL?


489

Je veux changer le type de données de plusieurs colonnes de float à int. Quelle est la manière la plus simple de procéder?

Il n'y a pas encore de données à craindre.


6
Juste pour rendre cela explicite, les réponses ci-dessous (en utilisant ALTER TABLE) fonctionneront, en fait, même si la colonne contient déjà des données. Cependant, la conversion d'une colonne flottante en une colonne entière entraînera l'arrondissement de toutes les valeurs non entières à l'entier le plus proche.
Ilmari Karonen

Réponses:


898

http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

ALTER TABLE tablename MODIFY columnname INTEGER;

Cela changera le type de données de la colonne donnée

Selon le nombre de colonnes que vous souhaitez modifier, il peut être préférable de générer un script ou d'utiliser une sorte de GUI client mysql


88
Rappel convivial - La valeur par défaut pour les colonnes est NULLABLE, donc si vous avez une colonne NOT NULL, n'oubliez pas d'utiliser "MODIFY nom_colonne INTEGER NOT NULL" sinon vous changerez votre colonne de NOT NULL à NULL.
Despertar

3
La modification de la table supprimera-t-elle les données de la table ou échouera-t-elle si quelque chose ne va pas avec le nouveau type de colonne?
EndermanAPM

1
ALTER TABLE nom de table MODIFY nom de colonne INTEGER unsigned; <- si vous souhaitez que la nouvelle colonne ne soit pas signée. C'était mon cas.
mircealungu

Je pense que l'avertissement @Despertars pourrait également être pertinent pour conserver les spécifications de CHARSET ou COLLATE.
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

37

Vous pouvez également utiliser ceci:

ALTER TABLE [tablename] CHANGE [columnName] [columnName] DECIMAL (10,2)

12

Si vous souhaitez remplacer toutes les colonnes d'un certain type par un autre type, vous pouvez générer des requêtes à l'aide d'une requête comme celle-ci:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' <new datatype> ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = '<your database>' 
    and column_type = '<old datatype>';

Par exemple, si vous souhaitez changer les colonnes de tinyint(4)en bit(1), exécutez-le comme ceci:

select distinct concat('alter table ',
                       table_name,
                       ' modify ',
                       column_name,
                       ' bit(1) ',
                       if(is_nullable = 'NO', ' NOT ', ''),
                       ' NULL;')
  from information_schema.columns
  where table_schema = 'MyDatabase' 
    and column_type = 'tinyint(4)';

et obtenez une sortie comme celle-ci:

alter table table1 modify finished bit(1)  NOT  NULL;
alter table table2 modify canItBeTrue bit(1)  NOT  NULL;
alter table table3 modify canBeNull bit(1)  NULL;

!! Ne conserve pas de contraintes uniques, mais devrait être facilement corrigé avec un autre ifparamètre concat. Je laisserai au lecteur le soin de mettre en œuvre cela si nécessaire ..


7
Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length);

Ex:

Alter TABLE `tbl_users` MODIFY COLUMN `dup` VARCHAR(120);

5

Vous utilisez la alter table ... change ...méthode, par exemple:

mysql> create table yar (id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into yar values(5);
Query OK, 1 row affected (0.01 sec)

mysql> alter table yar change id id varchar(255);
Query OK, 1 row affected (0.03 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> desc yar;
+-------+--------------+------+-----+---------+-------+
| Field | Type         | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| id    | varchar(255) | YES  |     | NULL    |       |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.00 sec)

Je crois que c'est MODIFIER plutôt que changer, mais peut-être que les deux fonctionnent.
Zsolt Szilagyi

4

Pour changer le type de données de colonne, il existe une méthode de changement et une méthode de modification

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

Pour changer le nom du champ, utilisez également la méthode change

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

Si vous souhaitez modifier les détails de la colonne ajouter un commentaire, utilisez ceci

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
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.