Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL在严格模式下运行,给我带来问题。如何解决这个问题?_Php_Mysql_Laravel - Fatal编程技术网

Php MySQL在严格模式下运行,给我带来问题。如何解决这个问题?

Php MySQL在严格模式下运行,给我带来问题。如何解决这个问题?,php,mysql,laravel,Php,Mysql,Laravel,我有一个从佛罗里达州下载的CSV,所以我无法控制文件中的内容。有些字段(如price)有时为空。在我导入这些值的表中,我将sell_price标记为BIGINT、Unsigned、Allow Null和default为Null。但是,当我尝试插入空值(CSV中的空单元格)时,会出现以下错误: [PDOException] SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'sold_price'

我有一个从佛罗里达州下载的CSV,所以我无法控制文件中的内容。有些字段(如price)有时为空。在我导入这些值的表中,我将sell_price标记为BIGINT、Unsigned、Allow Null和default为Null。但是,当我尝试插入空值(CSV中的空单元格)时,会出现以下错误:

[PDOException]
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'sold_price' at row 1
我听从了建议,这就解决了问题。但是,每当重新启动MySQL时,我都会再次出现错误,必须重新执行该查询

另外,我认为这不是解决问题的合适方法,是吗?如果一个字段(如Seld_price)为空,并且我试图将其插入表中,我应该怎么做


我正在运行MySQL版本5.6.13。

您可以禁用严格模式。在my.ini文件中,您会发现如下内容

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
改为:

sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

不是整数或null。这是一个空字符串,由于您处于严格模式,mysql不会自动将空字符串转换为null或0或其他任何形式。在csv文件中不可能表示实际的sql null,因此空字符串是下一个最好的选择。如果您正在运行PHP脚本,您可以检查字段的正确值,并更改导致错误的字段。但实际上,您应该使用
LOAD DATA infle
并利用提供的编辑功能来实现这一点。我非常喜欢首先将数据加载到staging表中,其中所有列都是大字符串。然后在数据库内进行转换,以便查看错误所在的位置。另外,你可以用一个查询来完成所有的转换。@GordonLinoff,我就是这么做的。我试图把它放在一个临时桌上,但我并没有把所有的事情都当作一根绳子来做。非常有趣的想法。你可以考虑使用一个叫做第一阶段加载的开源工具。它可以很好地研磨csv文件。我想我的意思是,我真的想禁用严格模式吗?请原谅我在这里的无知,但这大概是有原因的,通过摆脱它,我是否为未来的问题做好了准备?这个问题的答案是“视情况而定”:。如果你能想到一种情况,自动转换不是你想要的,那么不要这样做。另一方面,在5.5(或5.4?)之前,strict_模式是默认禁用的,因此人们可以在很长一段时间内不使用strict_模式。但是,您也可以始终使用mysql函数“NULLIF”将空字符串替换为NULL值:NULLIF(“”,yourvalue)对不起,NULLIF(yourvalue“”)不是NULLIF(“”,yourvalue)