ORACLE导出文本到MYSQL 报错 Incorrect integer value: ''

今天从ORACLE导出数据文本格式的到MYSQL 5.6 发现
load data infile Incorrect date value ''
这种报错,从5.6开始在严格模式下插入数据如果是数字和日期
mysql> insert into testnull1 values('','test','');
ERROR 1366 (HY000): Incorrect integer value: '' for column 'id' at row 1
mysql> insert into testnull1 values(1,'test','');
ERROR 1292 (22007): Incorrect datetime value: '' for column 'dt' at row 1

会报错,实际上我们希望''为NULL;

5.6如果表结构是如果表是int,varchar,datetime
后如果通过 load data infile 如果记录如下
,test, 
同样会把空值转换为''会报如上的错,这个时候就要用\N来代替。
那么如果从ORACLE中导出
select nvl(to_char(id),'\N'),nvl(name,'\N'),to_char(dt,'yyyy-mm-dd hh24:mi:ss') from testnulli;
将NULL值转换为\N如下:

create table testnulli
(id int,name varchar2(20),dt date);

insert into testnulli
values(1,'gaopeng',to_date('2010-10-10 12:02:01','YYYY-MM-DD HH24:MI:SS'));

insert into testnulli
values(null,'gaopeng',null);

DECLARE
  row_result varchar2(4000);
  selectsql  varchar2(4000);
  qrycursor  SYS_REFCURSOR;
  txt_handle UTL_FILE.file_type;
BEGIN
  --selectsql  := 'select id || '','' || name || '','' || dti  from testdump where name = ''gaopeng''   and dti > to_date(''2015-03-17 00:00:00'', ''yyyy-mm-dd hh24:mi:ss'')';
  selectsql  := 'select nvl(to_char(id),''\N'')||'',''||nvl(name,''\N'')||'',''||nvl(to_char(dt,''yyyy-mm-dd hh24:mi:ss''),''\N'') from testnulli';
  txt_handle := UTL_FILE.FOPEN('DATA_PUMP_DIR', 'testnull.txt', 'w', 32767);
  open qrycursor for selectsql;
  loop
    fetch qrycursor
      into row_result;
    exit when qrycursor%notfound;
    UTL_FILE.PUT_LINE(txt_handle, row_result);
  end loop;
  --关闭游标    
  close qrycursor;
  UTL_FILE.FCLOSE(txt_handle);
end;

导出的文本如下:
1,gaopeng,2010-10-10 12:02:01
\N,gaopeng,\N
然后再次 load data infile 就不会出问题
mysql> load data infile '/tmp/testnull.txt' into table testnull1 fields terminated by ',' ;
Query OK, 2 rows affected (0.01 sec)
Records: 2  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from testnull1;
+------+---------+---------------------+
| id   | name    | dt                  |
+------+---------+---------------------+
|    1 | gaopeng | 2010-10-10 12:02:01 |
| NULL | gaopeng | NULL                |
+------+---------+---------------------+
2 rows in set (0.02 sec)

实际上
mysql> insert into testnull1 values(\N,'test',\N);
Query OK, 1 row affected (0.00 sec)
等价于
mysql> insert into testnull1 values(null,'test',null);
Query OK, 1 row affected (0.01 sec)

时间: 2024-11-10 01:03:09

ORACLE导出文本到MYSQL 报错 Incorrect integer value: ''的相关文章

通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 ‘incorrect string value: '\xF0...

原文:[原创]通俗易懂地解决中文乱码问题(2) --- 分析解决Mysql插入移动端表情符报错 'incorrect string value: '\xF0... 这篇blog重点在解决问题,如果你对字符编码并不是特别了解,建议先看看 < [原创]通俗易懂地解决中文乱码问题(1) --- 跨平台乱码 >. 当然,如果只是针对解决这个Mysql插入报错问题,本篇足够了.   一.定位错误   定位错误绝对是至关重要的一环.我建议遇到问题耐心分析一下比较好,毕竟"不是所有的牛奶都叫特仑苏

oracle dblink mysql 报错ORA-28500

问题描述 oracle dblink mysql 报错ORA-28500 配置信息如下:求大神支援 支援 支援 重要的事情说三遍 odbc.ini [myodbc5] Driver = /home/oracle/app/myodbc-4.18/lib/libmyodbc5.so Description = MySQL ODBC 5.1 Driver DSN SERVER = localhost PORT = 3306 USER = test Password = test DATABASE =

mysql案例:Java程序访问Mysql报错

mysql案例:Java程序访问Mysql报错'OPTION SQL_SELECT_LIMIT=XXX' [环境描述] mysql版本: 5.6.14-56-log Percona Server (GPL) 程序: 使用JDBC驱动mysql-connector-java访问mysql数据库 [报错信息] 程序访问mysql执行SQL语句的时候报错: You have an error in your SQL syntax; check the manual that corresponds t

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI

tomcat启动报错-SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响

问题描述 SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响 信息: Initializing Spring root WebApplicationContextlog4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).log4j:WARN Please initialize the log4j system properly.2013-1

hadoop-hive连接mysql 报错 readonly server

问题描述 hive连接mysql 报错 readonly server 各位大侠,我搭建了一个hadoop环境,用hive做数据仓库,mysql做hive的元数据仓库,用于定时分析用户数据中的日志文件,但在hive访问mysql的过程中,不定时的报如下错误: java.sql.SQLException: Query returned non-zero code: 1, cause: FAILED: Execution Error, return code 1 from org.apache.ha

gem-windous环境下 rails 连接mysql 报错

问题描述 windous环境下 rails 连接mysql 报错 用railsinstaller装的环境依赖的ruby rails devkit sqlite3都装过了现在想试试mysqlC:windowssystem32>rails new E:rubykk10 -d mysql Installing mysql2 (0.3.13)Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

windows环境下,ruby 连接mysql 报错

问题描述 windows环境下,ruby 连接mysql 报错 require "D:/ruby-mysql/ruby-mysql-0.2.6/mysql" begin #尝试连接mysql数据库 my = Mysql.connect("localhost","root","123456","test") #连接成功,显示Mysql数据库版本 puts my.get_server_info rescue M

远程连接-Navicat连接mysql报错!!

问题描述 Navicat连接mysql报错!! 用Navicat远程连接数据库是报错,,服务也开启了,请问什么原因 解决方案 Navicat/MySQL Front 操作 MySQL 1577 报错 解决方法 解决方案二: 是用root账号连的么.. 解决方案三: 这个问题是mysql断网下连接产生的? 解决方案四: 远程的服务器的mysql服务打开没? 解决方案五: 确定端口是否正确,有没防火墙(本机连接忽略) 解决方案六: 可能是防火墙的问题,用ping 172.16.80.62命令试下能否