【问题标题】:Warning | 1366 | Incorrect integer value: '' for column 'running_time_minutes' at row 34警告 |第1366章不正确的整数值:第 34 行的列“running_time_minutes”的“”
【发布时间】:2015-05-02 21:43:45
【问题描述】:

我收到了错误

警告 |第1366章不正确的整数值:'' for column running_time_minutes' 在第 34 行

使用以下脚本。该错误也适用于 Footage_lenght_feet 列。我的 .csv 有许多单元格的空值,但这是因为答案未知。我不明白为什么即使我为此列指定了“默认 NULL”,它仍然会返回错误。

    -- create the Films table

    DROP TABLE IF EXISTS Films;

    CREATE TABLE Films (

    title varchar (100) NOT NULL,
    alternate_title varchar (50),
    year_of_release varchar (15),   
    Country varchar (20),
    running_time_minutes int (10) default NULL,
    footage_lenght_feet int (10) default NULL,
    FilmStock varchar (10),
    FilmGauge varchar (10),
    BW_color varchar (10),
    notes varchar (255),
    print_publications varchar (255),
    existent_print varchar (255),
    URL_1 varchar (100),
    URL_2 varchar (100),
    URL_3 varchar (100),
    PRIMARY KEY(title),
    FOREIGN KEY(Country) REFERENCES Country (Country),
    FOREIGN KEY(FilmStock) REFERENCES FilmStock (FilmStock),
    FOREIGN KEY(BW_color) REFERENCES BW_color (BW_color),
    FOREIGN KEY(FilmGauge) REFERENCES FilmGauge (FilmGauge));
    ENGINE = INNODB;

    LOAD DATA LOCAL INFILE "Films.csv"
    INTO TABLE Films
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;

【问题讨论】:

  • 数据中有什么?您是否有带有小数部分的运行时间值?或者,运行时间可能类似于“123 分钟”。
  • 没有。只是整数。绝大多数是空白单元格。

标签: mysql null int warnings


【解决方案1】:

你没有发布任何数据,所以这有点推测,但我从你的 cmets 假设你有一个类似这样的输入文件:

"Title", "Alternate Title", "Year of Release", "Country","Running Time (minutes)", "Footage Length (feet)", "Filmstock","FilmGauge", "BW/Colour", "Notes", "Print Publications", "Existent Print", "URL1", "URL2","URL3"
"A title","","1958","UK","102","38000","","Kodak","70mm","BW","","","","",""
"Another title","","1958","UK",,"38000","","Kodak","70mm","BW","","","","",""

(注意第二行数据中running_time_minutes对应的字段为空。)

当 MySQL 读取此文件时,它会根据您给它的说明将每一行解析为字段:

LOAD DATA LOCAL INFILE "Films.csv"
    INTO TABLE Films
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;

然后它会尝试将数据强制转换为表中目标列的正确格式。 varchar 列不需要强制,所以很容易。数字列需要强制转换为数字才能存储。

这适用于具有数字数据的列(例如字符串 102),但是当 MySQL 遇到空列时,它会将其视为 空字符串。这与NULL 不同,它不是数字,不能强制转换为目标列的正确形式。因此,您会看到警告。

你需要在这里给 MySQL 一点帮助。添加列列表,用用户变量替换您遇到问题的数字列。然后你可以给 MySQL 明确的说明如何处理数字字段。

LOAD DATA LOCAL INFILE "Films.csv"
    INTO TABLE Films
    FIELDS TERMINATED BY ','
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES
    -- Put the numeric fields in user variables (names prefixed by @)
    (title, alternate_title, year_of_release, Country, @runningTime,
       @footageLength, FilmStock, Filmgauge, BW_color, notes, 
       print_publications, existent_print, URL_1, URL_2, URL_3
    ) 
    -- Now check for empty strings and set the numeric columns to null if they're found
    set running_time_minutes = if(@runningTime="", null, @runningTime),
        footage_lenght_feet = if(@footageLength="", null, @footageLength)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多