1

这可能是一个非常简单的问题,但对于我来说,当我尝试将此 CSV 文件导入我的 SQL 表时,我看不到我缺少什么。

我一直以 0 结束我的 int 'idRefs',而我的日期 '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)
);
4

1 回答 1

1

idRef

我不知道你为什么选择用双引号结束你的行,但该LINES TERMINATED BY '"'选项确实解决了这个问题

但是,由于您覆盖了默认的行终止符,因此您的实际换行符不再被视为数据;id因此,每条数据的开头都有一个换行符。

这实际上在警告中很明显。

我会"完全避免并使用正常的行尾,但快速解决方法是:
LINES TERMINATED BY '"\n'.

dob

出生日期问题有点不同,我不确定,但我会考虑在您的CSV 文件中以标准格式存储日期,因为它们现在相当模糊。

而不是4/15/68,尝试1968-15-04

MySQL 可能会将两年日期解释681968(我愿意),尽管DATE列支持该年份(以及所有其他年份都可以追溯到1000!),但它可能会根据您的弱输入格式选择应用进一步的限制。

DATE类型用于具有日期部分但没有时间部分的值。MySQL 以格式检索和显示DATE值。'YYYY-MM-DD'支持的范围是'1000-01-01'to '9999-12-31'

于 2013-07-11T15:52:49.297 回答