【发布时间】:2014-02-10 01:24:28
【问题描述】:
我有一个从佛罗里达州下载的 CSV,因此我无法控制文件中的内容。有些字段(例如价格)有时为空。在我导入这些值的表中,我将 sold_price 标记为 BIGINT、无符号、允许 Null 和默认 Null。但是,当我尝试插入 NULL 值(CSV 中的空单元格)时,出现错误:
[PDOException]
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'sold_price' at row 1
我按照in this answer someone posted 的建议解决了问题。但是,每当 MySQL 重新启动时,我都会再次收到错误,并且必须重新执行该查询。
另外,我认为这不是解决问题的适当方法,是吗?如果 sold_price 等字段为空并且我试图将其插入表中,我应该怎么做?
我正在运行 MySQL 5.6.13 版。
【问题讨论】:
-
''不是整数或空值。它是一个空字符串,并且由于您处于严格模式,mysql 不会自动将空字符串转换为 null 或 0 或其他任何内容。无法在 csv 文件中表示 ACTUAL sql null,因此最好使用空字符串。 -
如果您正在运行 PHP 脚本,您可以检查字段中的正确值并更改导致错误的字段。但在实践中,您应该使用
LOAD DATA INFILE并利用提供的编辑工具来执行此操作。 -
我非常喜欢首先将数据加载到临时表中,其中所有列都是大字符串。然后在数据库内部进行转换,这样就可以看到错误在哪里。另外,您可以使用一个查询来完成所有转换。
-
@GordonLinoff,这就是我正在做的事情。我正在尝试将其放入临时表中,但我并没有将所有内容都作为字符串进行。非常有趣的想法。
-
您可以考虑在加载的第一阶段使用名为heidisql.org 的开源工具。它在整理 csv 文件方面做得不错。