【发布时间】:2018-04-03 05:24:48
【问题描述】:
FIY:
- 我正在处理来自 Census - FactFinder 的 CVS 文件
- 使用 MySQL 5.7
- 操作系统是 Windows 10 PRO
所以,我创建了这张表:
+----------+------------+------+-----+---------+-------+
| 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): 不正确的整数值: '' for column 'FINCP' at 第 2 行
错误消息所指的行是:
2012000000051,3,104,2,17,1045360,1056030,,8200,1,1
我相信 FINCP 是空白值,就在 8200 出现问题之前。所以我按照这个线程说明:MySQL load NULL values from CSV data
并将我的代码更新为:
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' 整数值:'
此消息所指的行是:
2012000000318,3,1602,2,17,1045360,1056030,,,,
没有错误信息,所以我不知道到底是什么问题。我只能假设问题是有四个连续的空白值。
另一个提示,如果我使用 CSV 并将所有空白更改为 0,代码会顺利运行,但我不是粉丝或编辑原始数据,所以我想知道其他选项。
底线,我有问题:
1) 数据不应该像 MySQL 一样使用第一个代码加载,作为 null 和 0 一个普通的 0?
2) 我现在使用 SERIALNO = nullif(@SERIALNO,'') 遇到什么问题
我希望能够区分 0 和空值/空白值。
谢谢。
【问题讨论】:
-
您可以使用具有正则表达式功能的文本编辑器吗?
-
@TimBiegeleisen 我可以使用 Edit Pad Lite