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

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

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

推荐的过程是什么?

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

ALTER TABLE table_sample CHANGE col_sample col_sample VARCHAR; 

在此先感谢您的帮助。

在更改列types之前,请将您的MySQL服务器设置为严格模式,并确保您的varchar(n)列具有足够大的n以在转换为string时保存所有整数。 如果你不是在严格的模式下,那么MySQL会自动截断你的数据以适应你的string大小 :

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

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

 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

而且,当然,在尝试更改表之前,您将拥有数据库的全新validation备份。 通过validation,我的意思是你已经成功地将你的备份恢复到testing数据库中。