我接管了一个网站,最初的开发人员将日期存储为varchar,而不是datetime。诸如出生日期之类的日期字段有多种格式,例如dd/mm/yyyy、mm/dd/yyyy、mmddyyyy等。我想将此字段迁移到正确的数据类型,但有数百行。迁移字段的最佳方法是什么?php代码很可能也需要更新。谢谢你的反馈。
gcmastyq1#
迁移字段的最佳方法是什么?可能的方法:第一步。添加将字符串值日期转换为日期数据类型的生成列:
ALTER TABLE tablename ADD COLUMN dSomeDate DATE AS (STR_TO_DATE(SomeDate, {converting pattern})) STORED;
第二步。查找从旧列中选择的所有查询(包括函数、过程、触发器、事件等中的查询),将它们重写为新列用法并应用。第三步。找到所有修改查询并标记它们,将它们重写为新的列用法,但不应用。第四步。停止系统。进行完整备份并确保其一致性。第五步。alter table,删除生成的列,但添加常规列。用转换后的值填充它,并进行相应的更新。删除旧列。第六步。应用所有重写的数据修改代码。第七步。启动系统,确保一切正常。对每个要更改的列重复此过程。当然,您可以同时对许多列(或所有列)应用此方法,但这会增加问题发生的可能性,因为没有考虑某些内容。
1条答案
按热度按时间gcmastyq1#
迁移字段的最佳方法是什么?
可能的方法:
第一步。添加将字符串值日期转换为日期数据类型的生成列:
第二步。查找从旧列中选择的所有查询(包括函数、过程、触发器、事件等中的查询),将它们重写为新列用法并应用。
第三步。找到所有修改查询并标记它们,将它们重写为新的列用法,但不应用。
第四步。停止系统。进行完整备份并确保其一致性。
第五步。alter table,删除生成的列,但添加常规列。用转换后的值填充它,并进行相应的更新。删除旧列。
第六步。应用所有重写的数据修改代码。
第七步。启动系统,确保一切正常。
对每个要更改的列重复此过程。当然,您可以同时对许多列(或所有列)应用此方法,但这会增加问题发生的可能性,因为没有考虑某些内容。