使用LOAD DATA INFILE导入数据时Error Code 1264报错求助
Error Code 1264: Out of Range Value for
total_cases_per_million When Using LOAD DATA INFILE 报错原因分析
- 字段类型范围限制:你的表中
total_cases_per_million定义为decimal(12,6),该类型总位数为12(包含整数和小数部分),其中小数位占6位,因此整数部分最多仅能容纳6位数字(最大值为999999.999999)。若第2036行的实际值整数部分超过6位(比如1000000.000),就会触发超出范围错误。 - 数据包含非数字字符:如果CSV中该字段的值带有千分位逗号(如
"101,028.926"),即使被双引号包裹,MySQL解析时也无法将其转换为有效的decimal数值,进而触发1264错误。 - 表结构与定义不符:可能存在建表语句执行异常,或后续修改过表结构,导致
total_cases_per_million的实际类型比decimal(12,6)更小(比如decimal(10,6)),无法容纳目标数值。
解决方法
1. 验证并修正数据或字段类型
- 先查看第2036行的原始数据,确认
total_cases_per_million的具体值:- 如果值确实超出
decimal(12,6)范围,修改字段类型以支持更大的数值,例如改为decimal(13,6)(整数部分可容纳7位):ALTER TABLE coviddeaths MODIFY COLUMN total_cases_per_million decimal(13,6);
- 如果值确实超出
- 执行
DESCRIBE coviddeaths;命令,确认字段的实际类型是否与建表语句一致,若不一致则同步修正。
2. 处理含非数字字符的数据
如果CSV中该字段包含千分位逗号等干扰字符,修改LOAD DATA INFILE语句,通过变量替换清理数据后再导入:
LOAD DATA INFILE 'D:/BulkDataUpload/CovidDeaths.csv' INTO TABLE coviddeaths FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS (iso_code, continent, location, `date`, population, total_cases, new_cases, new_cases_smoothed, total_deaths, new_deaths, new_deaths_smoothed, @total_cases_per_million, new_cases_per_million, new_cases_smoothed_per_million, total_deaths_per_million, new_deaths_per_million, new_deaths_smoothed_per_million, reproduction_rate, icu_patients, icu_patients_per_million, hosp_patients, hosp_patients_per_million, weekly_icu_admissions, weekly_icu_admissions_per_million, weekly_hosp_admissions, weekly_hosp_admissions_per_million) SET total_cases_per_million = REPLACE(@total_cases_per_million, ',', '');
3. 检查MySQL严格模式(可选)
如果上述方法无效,可检查MySQL是否开启严格模式(sql_mode包含STRICT_TRANS_TABLES),严格模式下会对超出范围的数值直接报错而非截断。若需临时绕过,可执行:
SET sql_mode = '';
执行导入后建议恢复原模式(不建议长期关闭严格模式)。
内容的提问来源于stack exchange,提问作者Abhishek Yadav
相关产品推荐
相关产品推荐

