【问题标题】:Warnings on 'LOAD DATA INFILE' from .CSV - Integers and Dates来自 .CSV - 整数和日期的“LOAD DATA INFILE”警告
【发布时间】:2013-07-09 21:34:20
【问题描述】:

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

我的 int 'idRefs' 一直以 0 结尾,我的日期 'dob' 全部为 12 31 1969


警告示例:

| 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)
);

【问题讨论】:

    标签: mysql sql csv load file-io


    【解决方案1】:

    idRef

    我不知道你为什么选择用双引号结束你的行,但LINES TERMINATED BY '"' 选项does take care of that

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

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

    我会完全避免使用 " 并使用正常的行尾,但快速解决方法是:
    LINES TERMINATED BY '"\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!),它可能会根据您的弱输入格式选择应用进一步的限制。

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

    【讨论】:

    • 谢谢,成功了!我在别处借用了 LINES TERMINATED BY '"' 并假设我需要 CSV 文件中的那个字符,显然我不需要!我猜 '"' 只是表示空格/换行符!
    • @user2573020:这完全有效(如果有点无意义的话),但是您将终止符指定为 '"' 而不是 '"\n',因此 actual 换行符被认为是您数据的一部分......因此也是 ID 的一部分,因为它是每一行的第一个标记。
    猜你喜欢
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2020-04-18
    • 2012-09-02
    • 2016-07-30
    • 2011-05-28
    相关资源
    最近更新 更多