MySQL 列的整数值“不正确”,它是整数并允许为空?

Posted

技术标签:

【中文标题】MySQL 列的整数值“不正确”,它是整数并允许为空?【英文标题】:Incorrect integer value '' for a MySQL column that's integer and allow null? 【发布时间】:2014-08-12 10:18:48 【问题描述】:

我正在将 CSV 插入表格中。我无法控制 CSV 中的内容,而且很多字段都是空白的。例如,在我的第一条记录中,“baths_full”字段是空的(两个逗号背靠背)。

在我运行 mysql 5.5.37 的生产服务器上,它会插入带有 baths_full 的记录作为空字段。在我运行 MySQL 5.6.19 的本地机器上,它给了我错误:

[Illuminate\Database\QueryException]
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'baths_full' at row 1 (SQL: insert into `listings_queue` (`

奇怪的是表的架构是相同的。其实我是用生产机的导出来创建本地数据库的。

baths_full 字段设置为 TinyInt,无符号,允许为空,默认为空。要添加的一件事是,它看起来像在 Laravel 创建的 SQL 插入语句中,它将空值视为空格。无论如何,我的生产机器运行脚本没有问题,但它不会在本地运行。

【问题讨论】:

您是否在本地和生产环境中运行相同版本的 php 和 Laravel?即“mySQL”版本是唯一的区别吗? 能否提供一些处理 CSV 的代码以及将其插入数据库的代码? 好点。本地 PHP 是 5.5.13。生产是 PHP 5.5.13-2+deb.sury.org~precise+1。至于代码,我在laravel.io/bin/21PnN 放了一些。请记住,CSV 是由州发送给我的,因此我无法控制其中的大小或内容。 【参考方案1】:

为什么不尝试在插入之前将其类型转换为整数?

array( 'baths_full' => (int) $baths_full, ... )

喜欢

"VALUES(".((int) $baths_full).")"

【讨论】:

好吧,我使用的是 Laravel,它会自动处理插入。我没有做原始 SQL。 然后使用第一个,在使用插入功能之前(不管是什么)【参考方案2】:

我发现了我的问题。我的本地 MySQL 以严格模式运行。这个帖子的答案 (General error: 1366 Incorrect integer value with Doctrine 2.1 and Zend Form update) 修复了它。

【讨论】:

MVP:找到答案后回答自己的问题【参考方案3】:

如果数据库列已经包含一个不同数据类型的值,与您要更改的数据类型不同,则可能会引发错误 1366,例如,如果一个字符串值已经在您要更改为 tinyint 的表的一列中。我曾经遇到过这个。

【讨论】:

以上是关于MySQL 列的整数值“不正确”,它是整数并允许为空?的主要内容,如果未能解决你的问题,请参考以下文章

对于整数为整数且允许为空的MySQL列,错误的整数值''

不正确的整数值:''对于第1行的列'id'

错误代码:1366。不正确的整数值:第 2 行的列“ReportsTo”的“NULL”

获取 DatabaseError [SequelizeDatabaseError],不正确的整数值

Objective-C:将两个整数相除并返回一个四舍五入的整数值

MYSQL 触发器:JSON_SEARCH 整数 json 数组中的整数值