不正确的整数值:第 1 行的“id”列为“”

问题描述 投票:0回答:7

我正在尝试插入到我的 mySQL 数据库中。第一列是“id”列,因为它是一个 auto_increment 字段,所以我将其留空。出于某种原因,我无法插入并且出现下面提到的错误。我很感激任何帮助。

我在尝试插入时遇到以下错误:

Incorrect integer value: '' for column 'id' at row 1

我的查询

INSERT INTO workorders VALUES('', ?, ?, ?, ?, ?)
mysql insert
7个回答
37
投票

这可能意味着您的

id
是一个
AUTO_INCREMENT
整数,并且您正在尝试发送一个字符串。你应该指定一个列列表并从你的
INSERT
中省略它。

INSERT INTO workorders (column1, column2) VALUES (?, ?)

34
投票

要让 MySQL 为

AUTO_INCREMENT
字段生成序列号,您有三个选择:

  1. specify list a column list 并按照 njk 的建议从中省略你的 auto_incremented 列。 那将是最好的方法。 查看评论。
  2. 显式分配 NULL
  3. 明确分配 0

3.6.9。使用 AUTO_INCREMENT

...没有为 AUTO_INCREMENT 列指定值,所以 MySQL 自动分配序列号。你也可以明确地 将 NULL0 分配给列以生成序列号。

这三个语句将产生相同的结果:

INSERT INTO workorders (`priority`, `request_type`) VALUES(?, ?, ...)
INSERT INTO workorders VALUES(NULL, ?, ...)
INSERT INTO workorders VALUES(0, ?, ...)

26
投票

尝试编辑您的my.cf并注释原始sql_mode并添加sql_mode =“”.

vi /etc/mysql/my.cnf

sql_mode =“”

保存并退出...

service mysql restart

2
投票

对于

wamp/phpmyadmin
同样的错误,我已经编辑了
my.ini
,评论原文:

;sql-mode= "STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

并添加了

sql_mode = ""
.


2
投票

这是因为您的数据发送列类型是整数,而您正在向它发送一个字符串值。

所以,以下方法对我有用。 试试这个。

INSERT INTO workorders VALUES (
    null,
    ?,
    ?,
    ?,
    ?,
    ?
)

不要使用

'null'
。使用它作为
null
没有单引号。


0
投票

如果有phpMyAdmin,只需转到变量并查找SQL Mode,变量,编辑它并删除变量的所有内容,然后保存。对于那些不想接触代码的人来说,这也应该可以解决这个问题。


0
投票

使用mysql server时,输入

set global sql_mode=''
即可修复。

© www.soinside.com 2019 - 2024. All rights reserved.