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 列的整数值“不正确”,它是整数并允许为空?的主要内容,如果未能解决你的问题,请参考以下文章
错误代码:1366。不正确的整数值:第 2 行的列“ReportsTo”的“NULL”
获取 DatabaseError [SequelizeDatabaseError],不正确的整数值