MySQLの列のデータ型を変更するにはどうすればよいですか?


489

複数の列のデータ型をfloatからintに変更したい。これを行う最も簡単な方法は何ですか?

心配するデータはまだありません。


6
これを明示的にするためにALTER TABLE、列に既にデータが含まれている場合でも、以下の回答(を使用)は実際には機能します。ただし、float型の列を整数型の列に変換すると、その中の整数以外の値は最も近い整数に丸められます。
Ilmari Karonen

回答:


898

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

ALTER TABLE tablename MODIFY columnname INTEGER;

これにより、指定された列のデータ型が変更されます

変更する列の数によっては、スクリプトを生成するか、ある種のmysqlクライアントGUIを使用するのが最適な場合があります。


88
わかりやすいリマインダー-列のデフォルトはNULLABLEであるため、NOT NULL列がある場合は、「MODIFY columnname INTEGER NOT NULL」を使用することを忘れないでください。そうしないと、列がNOT NULLからNULLに変更されます。
Despertar

3
新しい列のタイプに問題がない場合、alter tableはテーブルのデータを削除するか、実行に失敗しますか?
EndermanAPM 2017年

1
ALTER TABLE tablename MODIFY columnname INTEGER unsigned; <-新しい列が符号なしであることを気にする場合。私の場合でした。
mircealungu 2017年

@Despertars警告は、CHARSETまたはCOLLATEの指定を維持する場合にも関係があると思います。
Halvor Holsten Strand

44
alter table table_name modify column_name int(5)

37

これを使用することもできます:

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

12

特定のタイプのすべての列を別のタイプに変更する場合は、次のようなクエリを使用してクエリを生成できます。

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>';

たとえば、列をからtinyint(4)に変更する場合は、次のbit(1)ように実行します。

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)';

次のような出力を取得します。

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;

!! 一意の制約は保持されませんが、別のif-parameter toで簡単に修正できconcatます。必要に応じて、実装するかどうかは読者に任せます。



5

alter table ... change ...たとえば、次の方法を使用します。

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)

変更ではなくMODIFYだと思いますが、両方ともうまくいくかもしれません。
Zsolt Szilagyi

4

列のデータ型を変更するには、変更 方法と変更方法があります

ALTER TABLE student_info CHANGE roll_no roll_no VARCHAR(255);

ALTER TABLE student_info MODIFY roll_no VARCHAR(255);

フィールド名を変更するには、changeメソッドも使用します

ALTER TABLE student_info CHANGE roll_no identity_no VARCHAR(255);


0

列の詳細を変更したい場合は、コメントを追加してください。

ALTER TABLE [table_name] MODIFY [column_name] [new data type] DEFAULT [VALUE] COMMENT '[column comment]' 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.