CSV导入MySQL Workbench时INT类型year列被截断问题求助
解决MySQL导入CSV时year列数据截断的问题
1. 排查CSV文件Year列的实际数据
- 打开CSV文件逐行检查Year列,确认是否存在以下问题:
- 非数字内容(比如字符串、空格、特殊符号、制表符)
- 用
NA表示空值(MySQL的INT列无法识别NA字符串,会触发截断) - 超出INT范围的数值(INT的取值范围是-2147483648到2147483647)
2. 修正CSV中的非法数据
- 将Year列的
NA替换为空白(导入时MySQL会自动识别为NULL),或直接写入NULL(需确保CSV支持该格式) - 删除Year列中的所有非数字字符,保证每一行的Year值都是合法整数
3. 调整MySQL Workbench的导入配置
- 在导入向导中确认字段映射:CSV的Year列需对应表中的
year字段,数据类型选择INT - 勾选允许空值选项(若存在空的Year值)
- 可临时开启跳过错误行,先导入正常数据,再单独处理报错行
4. 临时调整MySQL的sql_mode
若因严格模式导致截断报错,可临时关闭严格模式:
SET sql_mode = '';
导入完成后恢复原有sql_mode(示例为默认配置):
SET sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
5. 预处理CSV后再导入
如果数据量较大,可用工具或脚本清洗数据,比如Python脚本替换NA为空:
import csv with open('olympic_history.csv', 'r') as infile, open('cleaned_olympic_history.csv', 'w', newline='') as outfile: reader = csv.DictReader(infile) writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames) writer.writeheader() for row in reader: if row['Year'] == 'NA': row['Year'] = '' writer.writerow(row)
之后导入清洗后的cleaned_olympic_history.csv文件即可
内容的提问来源于stack exchange,提问作者Shanza Saeed
相关产品推荐
相关产品推荐

