Mysql 加载空值INT

Mysql 加载空值INT,mysql,sql,load,Mysql,Sql,Load,飞行: 我正在处理人口普查实况调查中的一个CVS文件 使用MySQL 5.7 操作系统是Windows10Pro 因此,我创建了这个表: +----------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------+------+-----+---------+-------+ | SERIAL

飞行:

  • 我正在处理人口普查实况调查中的一个CVS文件
  • 使用MySQL 5.7
  • 操作系统是Windows10Pro
因此,我创建了这个表:

+----------+------------+------+-----+---------+-------+
| Field    | Type       | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+-------+
| SERIALNO | bigint(13) | NO   | PRI | NULL    |       |
| DIVISION | int(9)     | YES  |     | NULL    |       |
| PUMA     | int(4)     | YES  |     | NULL    |       |
| REGION   | int(1)     | YES  |     | NULL    |       |
| ST       | int(1)     | YES  |     | NULL    |       |
| ADJHSG   | int(7)     | YES  |     | NULL    |       |
| ADJINC   | int(7)     | YES  |     | NULL    |       |
| FINCP    | int(6)     | YES  |     | NULL    |       |
| HINCP    | int(6)     | YES  |     | NULL    |       |
| R60      | int(1)     | YES  |     | NULL    |       |
| R65      | int(1)     | YES  |     | NULL    |       |
+----------+------------+------+-----+---------+-------+
并尝试使用以下方式加载数据:

LOAD DATA INFILE "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/Housing_Illinois.csv"
INTO TABLE housing
CHARACTER SET latin1
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
当出现此消息时,它不起作用:

错误1366(HY000):位于的列“FINCP”的整数值不正确:“” 第2排

错误消息引用的行是:

20120000051,3104,2,1710453601056030,8200,1,1,1

我相信FIPCP是空白值,正好在8200是问题之前。因此,我遵循以下线程说明:

并将我的代码更新为:

LOAD DATA INFILE "C:/ProgramData/MySQL/MySQL Server 5.7/Uploads/Housing_Illinois.csv"
INTO TABLE housing
CHARACTER SET latin1
COLUMNS TERMINATED BY ','
LINES TERMINATED BY '\n'
(@SERIALNO, @DIVISION, @PUMA, @REGION, @ST, @ADJHSG, @ADJINC, @FINCP, @HINCP, @R60, @R65)
SET
SERIALNO = nullif(@SERIALNO,''),
DIVISION = nullif(@DIVISION,''),
PUMA = nullif(@PUMA,''),
REGION = nullif(@REGION,''),
ST = nullif(@ST,''),
ADJHSG = nullif(@ADJHSG,''),
ADJINC = nullif(@ADJINC,''),
FINCP = nullif(@FINCP,''),
HINCP = nullif(@HINCP,''),
R60 = nullif(@R60,''),
R65 = nullif(@R65,'');
第一个错误现已消失,但出现以下消息:

'对于第12t行整数值处的列'R65':

此消息所指的行是:

201200000318,31602,2,1710453601056030,

没有错误信息,所以我不知道问题到底出在哪里。我只能假设问题在于有四个连续的空白值

另一个提示是,如果我使用CSV并将所有空格改为0,代码将非常流畅,但我不喜欢编辑原始数据,因此我想知道其他选项

总之,我必须回答以下问题:

1) 数据不应该加载第一个代码,因为MySQL应该将、、设为null,0设为普通的0吗

2) 我现在使用SERIALNO=nullif(@SERIALNO,,)有什么问题

我希望能够区分0和空/空值


谢谢。

MySQL的
加载数据
工具将
\N
解释为
空值。所以,如果你的争吵是这样的:

2012000000318,3,1602,2,17,1045360,1056030,\N,\N,\N,\N
那么你可能就没有这个问题了。如果您可以访问正则表达式替换工具,则可以尝试搜索以下模式:

(?<=^)(?=,)|(?<=,)(?=,)|(?<=,)(?=$)

(?您可以访问具有正则表达式功能的文本编辑器吗?@TimBiegeleisen我可以使用Edit Pad Lite