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

joh*_*n k 47 mysql varchar

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

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

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

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

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

mu *_*ort 54

在更改列类型之前,让MySQL服务器进入严格模式,并确保varchar(n)列的大小足以n在转换为字符串时保存所有整数.如果您没有处于严格模式,那么MySQL将默默地截断您的数据以适合您的字符串大小:

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

但如果你先进入严格模式:

mysql> set sql_mode = 'STRICT_ALL_TABLES';
mysql> alter table table_sample change col_sample col_sample varchar(6);
Run Code Online (Sandbox Code Playgroud)

你会得到一个很好的错误信息,如下所示:

ERROR 1406 (22001): Data too long for column 'col_sample' at row ...
Run Code Online (Sandbox Code Playgroud)

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

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