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

Anc*_*end 23 mysql insert

我想插入我的mySQL数据库.第一列是'id'列,因为它是一个auto_increment字段,我把它留空了.由于某种原因,我无法插入,我收到下面提到的错误.我很感激任何帮助.

尝试插入时出现以下错误:

Incorrect integer value: '' for column 'id' at row 1
Run Code Online (Sandbox Code Playgroud)

我的查询

$insertQuery = "INSERT INTO workorders VALUES('', '$priority', '$requestType', '$purchaseOrder', '$nte', '$jobSiteNumber')";
Run Code Online (Sandbox Code Playgroud)

Ker*_*mit 28

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

INSERT INTO workorders (column1, column2) VALUES ($column1, $column2)
Run Code Online (Sandbox Code Playgroud)

  • 来到这里时,我已经知道了这个选项,但是我认为它已经过去了,因为代码以前在我的在线服务器上运行但在本地主机上没有 (2认同)

pet*_*erm 22

要让MySql为AUTO_INCREMENT字段生成序列号,您有三个选项:

  1. 指定列表列表并从中忽略您的auto_incremented列,如njk建议的那样.那将是最好的方法.看评论.
  2. 显式分配NULL
  3. 明确指定0

3.6.9.使用AUTO_INCREMENT:

... 没有为AUTO_INCREMENT列指定,因此MySQL会自动分配序列号.您还可以显式为列分配NULL0以生成序列号.

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

$insertQuery = "INSERT INTO workorders (`priority`, `request_type`) VALUES('$priority', '$requestType', ...)";
$insertQuery = "INSERT INTO workorders VALUES(NULL, '$priority', ...)";
$insertQuery = "INSERT INTO workorders VALUES(0, '$priority', ...";
Run Code Online (Sandbox Code Playgroud)

  • 选项1实际上是"更好"的方法,并且会在将列添加到表中时使应用程序与MySQL抛出错误绝缘,或者(更糟糕的是)如果列重新排序,则将值填充到错误的列中.对于快速和肮脏的工作,0或NULL技巧就足够了.但是对于将在已部署的应用程序中运行的代码,您需要选项1. (4认同)

PJu*_*ior 10

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

vi /etc/mysql/my.cnf
Run Code Online (Sandbox Code Playgroud)

sql_mode =""

保存并退出...

service mysql restart
Run Code Online (Sandbox Code Playgroud)

  • 谢谢@PJunior 这对我有用。我习惯于让 auto_increment 负责在 INSERT 上播种 id。Ubuntu 18 路径是/etc/mysql/mysql.conf.d/mysqld.cnf (2认同)