使用充满数据的数据库从 tinyint 更改为 smallint

Changing from tinyint to smallint with a database full of data

真是一个安心的问题。

我的数据库中有一个字段使用 tinyint(3) 作为整数值。我现在意识到这是低值,想将其更改为 smallint。如果我使用 phpMyAdmin 更改它,是否会影响当前数据?我已经在本地尝试过,看起来不错,但我更喜欢 运行 有更多数据库经验的人。

您可以使用以下查询:

mysql> ALTER TABLE TableName MODIFY Id SMALLINT

还要确保该列是否附加了任何约束,然后您需要先删除这些约束。

您的数据 在某种程度上受到影响 -- 它将从 tinyint 更改为 smallint,因此实际上整个列都将受到影响一个 CAST 操作。但它不会 受到任何截断或数据丢失的影响。

因为 tinyintsmallint 的子集,这个转换操作应该不会造成任何问题。如果您试图在查询中将 tinyint 值转换为 smallint,您绝不会期望它会失败,因为每个 tinyint 也是一个 smallint。修改您的 table 架构时,同样的逻辑也适用。