ChatGPT解决这个技术问题 Extra ChatGPT

如何更改 MySQL 中列的数据类型?

我想将多列的数据类型从 float 更改为 int。最简单的方法是什么?

目前还没有数据需要担心。

只是为了明确这一点,即使该列已经包含数据,下面的答案(使用 ALTER TABLE)实际上也可以工作。但是,将浮点列转换为整数列将导致其中的任何非整数值四舍五入为最接近的整数。

e
evandrix

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

ALTER TABLE tablename MODIFY columnname INTEGER;

这将改变给定列的数据类型

根据您希望修改的列数,最好生成一个脚本,或者使用某种 mysql 客户端 GUI


友情提示 - 列的默认值为 NULLABLE,因此如果您有一个 NOT NULL 列,请不要忘记使用“MODIFY columnname INTEGER NOT NULL”,否则您会将列从 NOT NULL 更改为 NULL。
如果对新的列类型不满意,alter table 会删除表上的数据或执行失败吗?
ALTER TABLE 表名 MODIFY 列名 INTEGER 无符号; <-- 如果您关心未签名的新列。是我的情况。
我认为@Despertars 警告也可能与保留 CHARSET 或 COLLATE 的任何规范有关。
B
Brad Larson
alter table table_name modify column_name int(5)

U
Undo

你也可以使用这个:

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

T
Tobb

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

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


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

前任 :

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

H
Hasib Kamal Chowdhury

更改列数据类型有更改方法和修改方法

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

E
Eric Leschinski

您使用 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)

我相信这是修改而不是改变,但也许两者都有效。
m
michael01angelo

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

您还可以为列设置默认值,只需添加 DEFAULT 关键字,后跟该值。

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

这也适用于 MariaDB(测试版 10.2)


S
SteveTz

如果要更改列详细信息,设置默认值并添加注释,请使用此

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