繁体   English   中英

MySQL 5.6:加载空字符串时出错

[英]MySQL 5.6: Error on loading empty string

我正在使用LOAD DATA LOCAL INFILE并且尝试处理空字符串(数据来自excel中生成的csv),并以逗号分隔的Windows文件格式进行了转换。

我的方法是使用触发器将其替换为NULL。 我正在使用的代码如下,数据具有以下形式:

PERMNO,date,EXCHCD,SICCD,TICKER,COMNAM
10001,20000131,,,EWST,ENERGY WEST INC
10001,20000229,,4920,EWST,ENERGY WEST INC
10001,20000331,3,,EWST,ENERGY WEST INC
10001,20000428,3,4920,EWST,ENERGY WEST INC
10001,20000531,3,4920,EWST,ENERGY WEST INC

我已经阅读并搜索了两天。 尝试了一堆东西,所以我转向你。

手册指出

如果将SQL模式设置为限制性值,则对空或不正确的字段值的处理与刚刚描述的不同。 例如,如果sql_mode ='TRADITIONAL,则将空值或数值(例如'x')转换为数字列会导致错误,而不是转换为0。(对于LOCAL,警告是发生而不是错误,即使是限制性警告也是如此。 sql_mode值,因为服务器无法在操作过程中停止文件的传输。)

在我的情况下(使用mySQL Workbench作为客户端),传输确实停止并且收到以下错误消息( 不是警告 ):错误代码1366列exchange_code的整数值不正确。 最后一点,我的代码和触发器可以与其他任何单元格值一起使用,但是不能在我需要它捕获的空字符串上使用。

您能提供的任何帮助将不胜感激!

DROP TABLE IF EXISTS dum;

CREATE TABLE dum (
permno INT,
date date,
exchange_code INT(2),
sic INT(4),
ticker CHAR(10),
fname VARCHAR(200));

delimiter //
CREATE TRIGGER test BEFORE INSERT ON dum
        FOR EACH ROW
        BEGIN
            IF NEW.exchange_code = "" THEN SET NEW.exchange_code = NULL;
            END IF;
            IF NEW.sic = "" THEN SET NEW.sic = NULL;
            END IF;
END;//
delimiter ;

LOAD DATA LOCAL INFILE '~/Desktop/dum.csv'   
REPLACE
INTO TABLE dum
FIELDS TERMINATED BY ','
ESCAPED BY '\\'
OPTIONALLY ENCLOSED BY '"'

LINES TERMINATED BY '\n'
IGNORE 1 LINES;

将表更改为:

CREATE TABLE dum (
permno INT,
date date,
exchange_code INT(2) DEFAULT NULL,
sic INT(4) DEFAULT NULL,
ticker CHAR(10),
fname VARCHAR(200));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM