我正在编写一系列 SQL 脚本来导入 CSV 格式的大型数据集。我知道语法:
STR_TO_DATE('1/19/2013 5:11:28 PM', '%c/%e/%Y %l:%i:%s %p')
将正确转换传入的日期/时间字符串,如下所示:
2013-01-19 17:11:28
我引入的一个数据集有 240,000 条记录,78 个字段/列,其中至少 16 个列是 DATETIME 字段。 我将使用不同的数据集定期执行此导入。 对于每次导入,我都会重命名备份表,并从干净、空的新表开始。 我的问题是:就最佳实践而言,哪种进口方式更好?
- 在我使用 LOAD DATA LOCAL INFILE 引入日期时执行日期转换
- 使用 LOAD DATA... 将所有数据导入 VARCHAR 字段,然后返回并分别转换 16 列中的每一列
我认为我可以编写脚本来使用任一方法,但我正在寻求关于哪种方法“更好”的反馈。
最佳答案
您可以通过几个简单的过程转换所有列:
- 按原样导入数据,将临时日期存储在
VARCHAR
列中。 - 使用
ALTER TABLE
以正确的DATE
或DATETIME
格式创建日期列。 - 使用
UPDATE TABLE
将原始列转换为DATETIME
列。 - 删除原来的原始列。
另一种方法是在导入之前预处理 CSV 文件,这可以避免所有这些问题。
关于MySQL 导入 CSV、转换日期格式 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19843353/