如何将mysql字段类型从INT更改为VARCHAR会影响以前存储为INT的数据

时间:2011-09-19 01:18:10

标签: mysql varchar

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

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

实现此目的的推荐流程是什么?

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

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:52)

在更改列类型之前,让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

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