我在 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/