MySQL手动导入CSV遇列数据类型错误问题求助
解决MySQL 8.0导入COVID-19 CSV数据集的数值类型报错问题
1. 先排查CSV数据的异常格式
这是引发报错的核心原因,先检查数值列内容:
- 排查非数值字符:比如千分位逗号(
1,234.56)、空格、换行符,或是用NA/N/A/-表示的空值 - 确认小数分隔符:必须是
.(MySQL默认用.识别小数,若CSV用,会导致格式不匹配) - 核对负值格式:确保是
-123这种标准格式,而非(123)这类会计写法
2. 修正CREATE TABLE语句适配数据特征
针对你提到的字段规则(每百万住院患者数:总长度8位+3位小数;新增病例数含负值),表结构可以这么定义:
CREATE TABLE covid_data ( -- 其他列按需定义 hospitalizations_per_million DECIMAL(8,3), -- 支持负值,精准匹配8位总长度+3位小数 new_cases INT -- 新增病例用INT足够,数值过大则换BIGINT );
如果CSV里用NA这类字符表示空值,导入时要替换为MySQL识别的NULL:
LOAD DATA INFILE '/path/to/your/covid_data.csv' INTO TABLE covid_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' -- 若CSV字段用双引号包裹,必须添加此规则 LINES TERMINATED BY '\n' IGNORE 1 ROWS -- 忽略表头行 ( -- 按CSV列顺序对应表列,示例处理空值 column1, column2, @hospitalizations, @new_cases, columnN ) SET hospitalizations_per_million = NULLIF(@hospitalizations, 'NA'), new_cases = NULLIF(@new_cases, 'NA');
3. 解决Error 1265/1366的针对性方案
若仍报错,大概率是CSV存在隐藏异常字符或编码问题:
- 用Notepad++等编辑器打开CSV,开启显示所有字符功能,检查行尾、字段分隔符是否统一
- 将CSV编码转成UTF-8(MySQL默认支持UTF-8,避免编码不兼容导致的字符识别错误)
- 若数值带千分位逗号,导入时先移除:
LOAD DATA INFILE '/path/to/your/covid_data.csv' INTO TABLE covid_data FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS ( column1, column2, @hospitalizations, @new_cases, columnN ) SET hospitalizations_per_million = REPLACE(@hospitalizations, ',', ''), new_cases = REPLACE(@new_cases, ',', '');
4. 修复Table Data Import Wizard无数据问题
- 确认CSV路径正确,且文件未被其他程序占用
- 导入时手动指定字段分隔符、文本包裹符、行终止符,不要依赖自动检测(自动识别常出错)
- 选择「追加数据到表」或「替换现有数据」,确保目标表列数、顺序和CSV完全匹配
5. 验证数据有效性
导入后执行以下查询验证:
-- 检查数值列是否存在非法字符(若用varchar过渡过) SELECT hospitalizations_per_million FROM covid_data WHERE hospitalizations_per_million REGEXP '[^0-9.-]'; -- 测试数值排序功能 SELECT * FROM covid_data ORDER BY new_cases DESC;
内容的提问来源于stack exchange,提问作者The Thinker
相关产品推荐
相关产品推荐

