我需要将生产数据库中的一个字段从INT更新为VARCHAR.
当前INT字段中的信息是敏感的,我希望确保在更改表类型时不会无意中更改或 destruct 它.例如,用户可能将INT 123456存储在该列中,我希望确保在转换为VARCHAR后,它会被准确地存储.
实现这一点的推荐流程是什么?
当我使用这样的东西时,有什么需要担心的吗?
ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;
提前感谢您的帮助.
我需要将生产数据库中的一个字段从INT更新为VARCHAR.
当前INT字段中的信息是敏感的,我希望确保在更改表类型时不会无意中更改或 destruct 它.例如,用户可能将INT 123456存储在该列中,我希望确保在转换为VARCHAR后,它会被准确地存储.
实现这一点的推荐流程是什么?
当我使用这样的东西时,有什么需要担心的吗?
ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR;
提前感谢您的帮助.
在更改列类型之前,请将MySQL服务器设置为严格模式,并确保varchar(n)
列的大小足以容纳转换为字符串时的所有整数.如果您没有处于严格模式,MySQL将:
如果未启用严格SQL模式,并且为超过列最大长度的
CHAR
或VARCHAR
列指定了一个值,则该值将被截断以适合,并生成警告.对于非空格字符的截断,可以使用严格的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
.
当然,在try 更改表之前,您将有一个新的、经过验证的数据库备份.我说的verified是指你已经成功地将备份恢复到测试数据库中.