【问题标题】:Can i change a column data type in a MySQL database without loosing any datas?我可以在不丢失任何数据的情况下更改 MySQL 数据库中的列数据类型吗?
【发布时间】:2016-01-06 10:52:05
【问题描述】:

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

我已经做了一些测试......并且在一个充满Varchar的表格中,当我将列类型更改为Double时,它可以完美运行......之前的数据似乎是自动转换的。正常吗?是工作台在做所有的工作还是 MySQL 的事情?

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

我认为我必须将所有行都转换为另一个表,但如果它像这样工作,那就太完美了。

感谢赐教!

【问题讨论】:

    标签: java mysql jdbc workbench


    【解决方案1】:

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

    见官方documentation

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

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

    当然,你需要有兼容的类型。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2019-08-23
        • 1970-01-01
        • 2015-07-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多