我可以在不丢失任何数据的情况下更改MySQL数据库中的列数据类型吗?

时间:2016-01-06 10:52:06

标签: java mysql jdbc workbench

我想将一些列的类型从Varchar更改为Double而不会丢失表中的任何数据。我正在使用MySQL和Workbench来管理数据库。

我已经完成了一些测试...并且使用了一个充满Varchar的表,当我将列类型更改为Double时,它完美地运行...之前的数据似乎是自动转换的。这是正常的吗?是Workbench做的所有工作还是MySQL的东西?

另外,我使用JDBC和Java将数据推送到表中,当我使用PreparedStatement.setString()方法时它仍然有效,即使我将列类型更改为Double。

我以为我必须将自己的所有线条都转换成另一张桌子,但如果它的工作方式如此,那就完美了。

感谢您的启发!

2 个答案:

答案 0 :(得分:1)

当您使用ALTER TABLE语句(这是MySQL Workbench所做的)时,MySQL会为您完成工作。

查看官方documentation

  

使用CHANGEMODIFY更改数据类型时,MySQL会尝试尽可能将现有列值转换为新类型。

     
    

警告的     此转换可能导致数据更改。例如,如果缩短字符串列,则可能会截断值。要防止操作成功,如果转换为新数据类型会导致数据丢失,请在使用ALTER TABLE之前启用严格SQL模式(请参见第5.1.7节“服务器SQL模式”)。

  

当然,您需要兼容类型。

答案 1 :(得分:0)

在MYSQL中,您首先复制要从中更改数据类型的列,将类型转换为新列并将其重命名为旧列。如果更改数据类型,它可以完美地工作但是用于查看透视图。这不是正常的行为,一个定义明确的方法是上面提到的。