MYSQL的LOAD来加载ORACLE的CSV文件的过程中,碰到了棘手的几个问题。总结一下。
1、乱码
我本机装的MYSQL设置字符集是UTF8,但是从ORACLE导出的CSV文件GBK编码的,别说使用JDBC来运行了,就算在NAVICAT中运行都报错。
解决方法:先去判断是文件的字符集,然后去指定LOAD的CHARSET
2、INT类型的列,数据为空报错:incorrect integer value
原因在于,ORACLE导出的CSV中,空列是"",MYSQL会将其作为空字符处理(''),导致数据转换错误。
解决方法:
(1).导出时进行转换,如果为空,那么导出数据为"\N",这样MYSQL才会认出它是空值。
(2).NULLIF进行转换,如果当前列的数据为'',那么将其转成空。
相关代码:
修改好后的LOAD脚本:
load data infile "D:/ftpdir/t_ods_khxxb.csv"
into table t_ods_khxxb
CHARACTER SET GBK
COLUMNS terminated by ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(@KHBH,@JGBH,@KHXM,@KHXB,@KHZT,@GJ,@ZJLB,@ZJHM,@ZJ