如何更改MySQL中列的数据types?

我想将多个列的数据types从float更改为int。 什么是最简单的方法来做到这一点?

没有数据可以担心。

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

 ALTER TABLE tablename MODIFY columnname INTEGER; 

这将改变给定列的数据types

取决于你想修改的howmany列,最好是生成一个脚本,或者使用某种types的mysql客户端GUI

 alter table table_name modify column_name int(5) 

你也可以使用这个:

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

如果要将某个types的所有列更改为另一个types,可以使用如下查询生成查询:

 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参数concat 。 我会留给读者来实现,如果需要..

您使用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) 
 Alter TABLE `tableName` MODIFY COLUMN `ColumnName` datatype(length); 

例如:

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