MySQL 数据库字段是 varchar,而它应该是 datetime
MySQL database field is varchar when it should be datetime
我接管了一个网站,原来的开发人员在数据库中将日期存储为 varchar 而不是 datetime。出生日期等日期字段有多种格式,例如dd/mm/yyyy、mm/dd/yyyy、mmddyyyy 等
我想将此字段迁移到正确的数据类型,但有数百行。迁移字段的最佳方法是什么? php 代码很可能也需要更新。
感谢您的反馈。
What is the best approach for migrating the field?
可能的方式:
第 1 步。添加将字符串值日期转换为 DATE 数据类型的生成列:
ALTER TABLE tablename
ADD COLUMN dSomeDate DATE AS (STR_TO_DATE(SomeDate, {converting pattern})) STORED;
第 2 步。查找所有从旧列中选择的查询(包括函数、过程、触发器、事件等中的查询),将它们重写为新列用法并应用。
第 3 步。找到所有修改查询并标记它们,将它们重写为新的列用法,但不应用。
第四步,停止系统。做好完整备份并确保一致。
第 5 步。更改 table,删除生成的列但添加常规列。根据更新用转换后的值填充它。删除旧列。
第 6 步。应用所有重写的数据修改代码。
第 7 步. 启动系统并确保一切正常。
对要更改的每一列重复此过程。当然,您可以同时将此方法应用于很多列(或所有列),但这会增加由于未考虑某些内容而出现问题的可能性。
我接管了一个网站,原来的开发人员在数据库中将日期存储为 varchar 而不是 datetime。出生日期等日期字段有多种格式,例如dd/mm/yyyy、mm/dd/yyyy、mmddyyyy 等
我想将此字段迁移到正确的数据类型,但有数百行。迁移字段的最佳方法是什么? php 代码很可能也需要更新。
感谢您的反馈。
What is the best approach for migrating the field?
可能的方式:
第 1 步。添加将字符串值日期转换为 DATE 数据类型的生成列:
ALTER TABLE tablename
ADD COLUMN dSomeDate DATE AS (STR_TO_DATE(SomeDate, {converting pattern})) STORED;
第 2 步。查找所有从旧列中选择的查询(包括函数、过程、触发器、事件等中的查询),将它们重写为新列用法并应用。
第 3 步。找到所有修改查询并标记它们,将它们重写为新的列用法,但不应用。
第四步,停止系统。做好完整备份并确保一致。
第 5 步。更改 table,删除生成的列但添加常规列。根据更新用转换后的值填充它。删除旧列。
第 6 步。应用所有重写的数据修改代码。
第 7 步. 启动系统并确保一切正常。
对要更改的每一列重复此过程。当然,您可以同时将此方法应用于很多列(或所有列),但这会增加由于未考虑某些内容而出现问题的可能性。