web-dev-qa-db-fra.com

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

Je veux changer le type de données de plusieurs colonnes de float à int. Quel est le moyen le plus simple de faire cela?

Il n'y a pas de données à s'inquiéter pour le moment.

425
Eric Wilson

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 d’interface graphique pour le client mysql.

799
Yannick Motton
alter table table_name modify column_name int(5)
42
php

Vous pouvez également utiliser ceci:

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

Si vous voulez changer toutes les colonnes d'un certain type en un autre type, vous pouvez générer des requêtes en utilisant 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 modifier les colonnes de tinyint(4) en bit(1), exécutez-le comme suit:

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 un résultat comme celui-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 les contraintes uniques, mais devrait être facilement corrigé avec un autre paramètre if- à concat. Je laisserai au lecteur le soin de le mettre en œuvre si nécessaire.

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

Ex:

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

Vous utilisez la méthode alter table ... change ..., 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)
5
Ólafur Waage

Pour changer le type de données de la colonne, il existe une méthode change et une méthode modify

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);
2
Hasib Kamal

https://dev.mysql.com/doc/refman/8.0/en/alter-table.html

Vous pouvez également définir une valeur par défaut pour la colonne en ajoutant simplement le mot clé DEFAULT suivi de la valeur.

ALTER TABLE [table_name] MODIFY [column_name] [NEW DATA TYPE] DEFAULT [VALUE];

Cela fonctionne aussi pour MariaDB (version testée 10.2)

1
michael01angelo

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

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
0
Joe_Tz