这可能是一个非常简单的问题,但对于我来说,当我尝试将此 CSV 文件导入我的 SQL 表时,我并没有发现我遗漏了什么。
我的 int 'idRefs' 总是以 0 结尾,我的日期 'dob' 都是 1969 年 12 月 31 日
警告示例:
| Warning | 1366 | Incorrect integer value: '
10002' for column 'idRef' at row 1 |
| Warning | 1265 | Data truncated for column 'dob' at row 1
LOAD DATA INFILE 语句 --
mysql> LOAD DATA INFILE '/home/user/Documents/pplList.csv' INTO TABLE people
FIELDS TERMINATED BY ',' LINES TERMINATED BY '"' IGNORE 1 LINES
(idRef, lastName, firstName, dob, rsNum, slNum, firstVisit, pplPref, coachName);
只是 CSV 中的一些示例 --
idRef,lastName,firstName,dob,rsNum,slNum,firstAppt,pplPref,coachName"
10001,BlankA,NameA,4/15/68,1000000,4600000,3/31/08,Positive,John Jay"
10002,BlankB,NameB,10/28/78,1000001,4600001,8/19/11,Positive,John Jay"
'people' 表 SQL 代码 --
DROP TABLE IF EXISTS people;
CREATE TABLE people
(
id smallint unsigned NOT NULL auto_increment,
idRef int unsigned NOT NULL,
lastName varchar(255),
firstName varchar(255),
dob date NOT NULL,
rsNum int unsigned NOT NULL,
slNum int unsigned NOT NULL,
firstAppt date NOT NULL,
pplPref varchar(255),
coachName varchar(255),
PRIMARY KEY (id)
);
最佳答案
idRef
我不知道你为什么选择用双引号结束你的行,但是 LINES TERMINATED BY '"'
选项 does take care of that 。
但是,由于您覆盖了默认行终止符,您的实际 换行符不再被视为数据;因此,每段id
数据的开头都有一个换行符。
这实际上在警告中很明显。
我会完全避免 "
并使用正常的行结尾,但快速修复是:
由 '"\n' 终止的行
。
dob
出生日期 问题有点不同,我对此不确定,但我会考虑在 CSV 文件中以标准格式存储日期,因为它们相当模糊现在。
尝试 1968-15-04
而不是 4/15/68
。
MySQL 可能会将两年日期 68
解释为 1968
(我会),尽管 the DATE
column supports that year (and all other years going back to 1000
!) ,它可能会根据您的弱输入格式选择应用进一步的限制。
The
DATE
type is used for values with a date part but no time part. MySQL retrieves and displaysDATE
values in'YYYY-MM-DD'
format. The supported range is'1000-01-01'
to'9999-12-31'
.
关于mysql - 来自 .CSV 的 'LOAD DATA INFILE' 警告 - 整数和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17596324/