mysql in null 报错_MySQL加载数据Infile - Null导致错误1265:数据被截断

我在将数据从csv导入mysql表时遇到问题。我试图使用“加载数据填充”,但每次尝试运行我的代码时"Error Code: 1265. Data Truncated for column 'DIP20' at row 237"

这个问题源于这样一个事实:第237行的列dip20是csv文件中的第一个空条目,但是我的研究表明,mysql应该将空条目读取为0s。这将停止运行整个导入,并且没有数据进入我的表。我一直在试图找到一种方法来指示mysql接受空值,但是没有找到任何东西。

我在这方面注意到的其他线程建议对源数据进行修改,以将“\n”放入每一个空值中,但这确实不实用,原因有两个。首先,我有大量的数据要处理,其次,当我开发完这个数据库时,我必须把它留给其他人,他们中没有人有时间、能力或倾向于在将来收到更多的数据时编辑数据。

如果有人能提出一种方法,让这个进口运行,而不落在零上,我将非常感谢。

我要运行的代码是:

LOAD DATA INFILE '\\\\server\\path\\morepath\\file.csv'

INTO TABLE deidata.tbl_HHDataImport

FIELDS TERMINATED BY ',' ESCAPED BY '\\'

LINES TERMINATED BY '\r\n' STARTING BY ''

IGNORE 1 LINES

表格结构如下:

table tbl_HHDataImport

(

CNF_ID VARCHAR(10) PRIMARY KEY,

Read_date Datetime,

DIP1 float,

DIP2 float,

//...{48 DIP columns here}...

DIP47 float,

DIP48 float

)

(这不是一个临时表,我将从中把数据转换成适当的关系结构。这是我正在接收的数据的格式,我无法更改。)

我习惯于在ms sql server中开发dbs,但目前在一家资金有限的非盈利组织工作,因此我被要求与mysql一起工作。我以为在碰到这个问题之前我过得很好。我使用的是mysql 5.6.13和mysql workbench 6.0。

提前谢谢

汤姆

最佳答案:

我非常喜欢先将数据加载到临时表中,然后在数据库中进行类型转换。

也就是说,创建一个具有所有相同字段但定义为varchar(255)或nvarchar(255)的临时表(取决于csv文件的内容)。

这应该正确加载,没有类型转换错误。

然后做如下事情:insert into tbl_HHDataImport(Read_Date, DIP1, . . . )

select now(), cast(DIP1 as float), . . .

from tbl_HHDataImport_staging;

当你有转换问题时,你很容易就能确定它。我猜代码应该是:

insert into tbl_HHDataImport(Read_Date, DIP1, . . . )

select now(),

(case when DIP1 <> 'NULL' then cast(DIP1 as float) end), . . .

from tbl_HHDataImport_staging;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值