You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL LOAD DATA INFILE导入CSV时user_type字段截断错误解决求助

解决LOAD DATA INFILE导入CSV时user_type字段空值报错的问题

问题根源

虽然user_type字段允许NULL,但MySQL默认不会将CSV中的空字符串(,,之间的空内容)自动转换为NULL,而是尝试将空字符串解析为double类型,这会触发数据截断错误,尤其在严格SQL模式下会直接报错终止导入。

解决方案

方法1:使用NULLIF函数转换空字符串为NULL

这是最直接且符合需求的解决方式,通过SET子句将空字符串转为NULL:

load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Table-2 events.csv" 
into table events 
fields terminated by "," 
lines terminated by "\r\n" 
ignore 1 lines 
(user_id, occurred_at, event_type, event_name, location, @user_type, device)
SET user_type = NULLIF(@user_type, '');

这里先用用户变量@user_type接收CSV中的原始值,再通过NULLIF判断:如果值是空字符串,就转为NULL;如果是有效数字,则保留原数值。

方法2:临时调整SQL_MODE(仅应急参考)

如果不想修改导入语句,可以临时关闭严格SQL模式,让MySQL将空字符串转为0(但这不符合你需要NULL的业务逻辑,不推荐长期使用):

-- 临时关闭严格模式
SET SQL_MODE = '';
-- 执行导入语句
load data infile "C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/Table-2 events.csv" 
into table events 
fields terminated by "," 
lines terminated by "\r\n" 
ignore 1 lines 
(user_id, occurred_at, event_type, event_name, location, user_type, device);
-- 恢复原有SQL_MODE(请替换为你原本的设置)
SET SQL_MODE = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';

验证

使用方法1的语句导入你提供的示例数据时,user_type为空的行(比如11769,01-05-2014 02:37,signup_flow,create_user,United Kingdom,,lenovo thinkpad)会正确将user_type设为NULL,不会再触发截断错误。

内容的提问来源于stack exchange,提问作者Keerthana Satheesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 15:10:25