MySQL-插入一条主键为空的记录,在一台服务器上工作,而不是另一台服务器

标签 mysql auto-increment insert-update string

我在 MySQL 服务器(版本 5.5.27,安装了用于开发的 EasyPHP)中有一个表,它有一个带有 Auto_Increment 的 ID,它的数据类型是 INT(11)。

当我尝试插入一条记录时,使用这条语句,它起作用了。

insert into factclientes (IDFactClientes, IDTercero, SubTotal, IVA, Total)
        values ('', '3', '2500.00', '400.00', '2900.00')
        ON DUPLICATE KEY UPDATE IDTercero = values(IDTercero),
                SubTotal = values(SubTotal), 
                IVA = values(IVA), 
                Total = values(Total)

但是当我尝试在我的生产服务器(版本 5.6.17,独立安装在另一台机器上)上插入相同的记录时,它会抛出一个错误:

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

我知道这是因为主键 ID“IDFactClientes”的值为空。我这样做是因为我使用相同的语句来插入和更新。如果我的程序不知道也没有指定 IDFactClientes,我想要一个新记录,如果我的程序已经知道 ID,并且指定了它,我想要更新记录。

奇怪的是它在我的开发机器上运行,但在我的生产服务器上却不起作用。

我是否缺少设置??我该如何解决这个问题??我的数据库的所有表都存在完全相同的问题,我不想修改程序中的所有语句...如果可能的话

提前致谢!

最佳答案

我找到了!!! or remember it…前段时间听说了“STRICT MODE”,突然想起来了!!所以我寻找如何关闭“严格模式”,我找到了两种方法:

方法一: 打开 MySQL 安装目录中的“my.ini”文件并查找类似...

# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

替换为:

# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

方法二: 您可以在您的数据库管理工具(例如 phpMyAdmin)中运行 SQL 查询,通常可以从您的虚拟主机控制面板中找到它:

SET @@global.sql_mode= '';

我认为第一种方法是永久性的,而第二种方法必须在每次连接时都进行...我认为

关于MySQL-插入一条主键为空的记录,在一台服务器上工作,而不是另一台服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27533710/

相关文章:

php - Laravel/MySQL/ Eloquent : Grouped Clauses

sql - 使用自动增量键插入的多行的序号

c# - 在 C# 中第 1 行的 'Value1' 列数据被截断

mysql - INSERT ... ON DUPLICATE KEY UPDATE 行 IF date_add > VALUES(date_add)

c# - 字段列表错误中的MySql未知列

mysql - PHPMYADMIN LAST_INSERT_ID 返回 0

php - 拆分此 sql 查询,以便它可以像在工作台上一样在 php 上运行

PHP MySQL 和队列、表锁定、读写器问题

Mysql 组条目自动递增

mysql - JPA/JPQL 插入和提取合二为一