MySQL8.0: 插入日期数据时出错

MySQL 8.0: Error when inserting date data

我有一个制表符分隔的文件如下:

当我尝试在 MySql 中导入文件时:

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

我收到以下错误:

Incorrect date value: '02/15/2008' for column 'BI_signup_date' at row 1

我该如何解决这个问题?

您文件中的日期格式与 MySQL 预期的格式不符。该列中还有一些非日期值 ('not BI')。一种解决方案是预处理您的输入以将其转换为相关格式。

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/customer.csv'
INTO TABLE customers
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(customer_id, @BI_signup_date, email_address)
SET BI_signup_date = CASE
    WHEN @BI_signup_date = 'not BI' THEN NULL
    ELSE STR_TO_DATE(@BI_signup_date, '%m/%d/%Y')
END;

这会将值 'not BI' 转换为 NULL(因为显然这不能转换为日期),并将其他值转换为 MySQL 日期格式。其他策略也是可能的,比如根据正则表达式检查值的格式。您可以根据需要修改逻辑。

参考:Input preprocessing in MySQL LOAD DATA syntax

Each col_name_or_user_var value is either a column name or a user variable. With user variables, the SET clause enables you to perform preprocessing transformations on their values before assigning the result to columns.

编辑您的 csv 文件并将日期格式转换为 Y-m-d。 这将解决您关于日期格式的所有问题。