MySQL数据导入报错求助:日期格式与空值问题排查
错误原因分析与解决方法
一、日期格式错误(错误码1292)
你的birthdate字段定义为DATETIME类型,MySQL默认仅识别**YYYY-MM-DD**(或YYYY-MM-DD HH:MM:SS)格式的日期,而你导入的日期是DD-MM-YYYY格式(比如18-02-1962是日-月-年),MySQL无法解析这种格式,因此抛出错误。
解决方法:
- 修改源数据:将所有日期转换为
YYYY-MM-DD格式,比如把18-02-1962改为1962-02-18。 - 导入时转换(推荐):如果使用
LOAD DATA INFILE命令导入,可通过STR_TO_DATE函数实时转换格式,示例代码:LOAD DATA INFILE 'your_file.csv' INTO TABLE employee FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (employee_id, last_name, first_name, title, reports_to, @birthdate, @hire_date, address, city, state, country, postal_code, phone, fax, email) SET birthdate = STR_TO_DATE(@birthdate, '%d-%m-%Y'), hire_date = STR_TO_DATE(@hire_date, '%d-%m-%Y'); - 临时调整SQL模式(不推荐):修改
sql_mode关闭严格日期校验,但可能导致数据格式混乱,命令如下:SET sql_mode = 'NO_ZERO_DATE,NO_ZERO_IN_DATE';
二、整数空值错误(错误码1366)
reports_to字段定义为INT NULL(允许为空),但你导入的数据中该字段值是空字符串''。MySQL在严格模式下,无法将空字符串转换为整数类型的NULL,因此报错。
解决方法:
- 修改源数据:将所有
reports_to字段的空字符串替换为NULL。 - 导入时处理:使用
NULLIF函数将空字符串转为NULL,结合LOAD DATA的示例:LOAD DATA INFILE 'your_file.csv' INTO TABLE employee FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (employee_id, last_name, first_name, title, @reports_to, @birthdate, @hire_date, address, city, state, country, postal_code, phone, fax, email) SET reports_to = NULLIF(@reports_to, ''), birthdate = STR_TO_DATE(@birthdate, '%d-%m-%Y'), hire_date = STR_TO_DATE(@hire_date, '%d-%m-%Y');
内容的提问来源于stack exchange,提问作者Akhil_M
相关产品推荐
相关产品推荐

