mysql - 来自 .CSV 的 'LOAD DATA INFILE' 警告 - 整数和日期

标签 mysql sql csv load file-io

这可能是一个非常简单的问题,但对于我来说,当我尝试将此 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 displays DATE 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/

相关文章:

Python CSV 阅读器和迭代

mysql - 错误 : "Cannot Connect to Database Server"

mysql - 是否可以根据表在 mysql 上创建的时间来重置表上的值

c# - FOREACH 递归 SQL 语句

python - 删除 csv 文件中正在使用的行

ruby 阵列#include?给出 NoMethodError

MySQL多表user_id不存在查询

mysql - 如何分离字符串并重新构建它

sql - 在亚马逊 Redshift 中取消列出一个数组

sql - 我可以在同一个WITH查询中选择多个表吗?