【问题标题】:How will changing the mysql field type from INT to VARCHAR affect data previously stored as an INT将 mysql 字段类型从 INT 更改为 VARCHAR 将如何影响以前存储为 INT 的数据
【发布时间】:2011-09-19 01:18:09
【问题描述】:

我需要将生产数据库中的一个字段从 INT 更新为 VARCHAR。

当前 INT 字段中的信息是敏感信息,我想确保在更改表类型时不会无意更改或破坏它。例如,用户可能将 INT 123456 存储在此列中,我想确保在转换为 VARCHAR 后准确存储。

完成此操作的推荐流程是什么?

使用这样的东西有什么需要担心的吗?

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;

提前感谢您的帮助。

【问题讨论】:

    标签: mysql varchar


    【解决方案1】:

    在更改列类型之前让您的 MySQL 服务器进入严格模式,并确保您的 varchar(n) 列有足够大的 n 来容纳所有转换为字符串时的整数。如果您不是在严格模式下,那么 MySQL 将 silently truncate your data to fit your string size:

    如果未启用严格 SQL 模式,并且您为 CHARVARCHAR 列分配的值超过了列的最大长度,则该值将被截断以适应并生成警告。对于非空格字符的截断,您可能会导致发生错误(而不是警告)并使用严格的 SQL 模式禁止插入值。

    但如果你先进入strict mode

    mysql> set sql_mode = 'STRICT_ALL_TABLES';
    mysql> alter table table_sample change col_sample col_sample varchar(6);
    

    你会收到这样一个很好的错误信息:

    ERROR 1406 (22001): Data too long for column 'col_sample' at row ...
    

    如果你的整数不适合你的varchar

    当然,在您尝试更改表之前,您将拥有一个经过验证的全新数据库备份。 已验证我的意思是您已成功将备份恢复到测试数据库中。

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 2023-02-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 2018-12-31
      • 2014-10-13
      • 2016-09-14
      相关资源
      最近更新 更多