如何将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模式未启用,并且将值分配给超过列最大长度的
CHAR
或VARCHAR
列,则该值将被截断以生成警告。 要截断非空格字符,可以导致发生错误(而不是警告),并通过使用严格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数据库中。