aam*_*dia 3 mysql string insert-update auto-increment
我在 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)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在我的生产服务器(版本 5.6.17,独立安装在另一台机器上)上插入相同的记录时,它会引发错误:
Incorrect integer value: '' for column 'IDFactClientes' at row 1
Run Code Online (Sandbox Code Playgroud)
我知道这是因为主键 ID 'IDFactClientes' 有一个空值。我这样做是因为我对 INSERT 和 UPDATE 使用了相同的语句。如果我的程序不知道并且没有指定 IDFactClientes,我想要一个新记录,如果我的程序已经知道 ID,并且指定了我想要更新记录。
奇怪的是它可以在我的开发机器上运行,但不能在我的生产服务器上运行。
是不是缺少什么设置??我怎么能解决这个问题??我的数据库的所有表都有完全相同的问题,我不想修改程序中的所有语句......如果可能的话
先感谢您!!
我找到了!!!或者想起来了……前段时间我听说了“严格模式”的事情,我突然想起来了!!所以我寻找如何关闭“严格模式”,我找到了两种方法:
方法一:打开MySQL安装目录下的“my.ini”文件,查找类似...
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
用。。。来代替:
# Set the SQL mode to strict
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Run Code Online (Sandbox Code Playgroud)
方法 2:您可以在您的数据库管理工具(例如 phpMyAdmin)中运行 SQL 查询,通常可以从您的虚拟主机控制面板找到它:
SET @@global.sql_mode= '';
Run Code Online (Sandbox Code Playgroud)
我认为第一种方法是永久性的,第二种方法必须在每次连接时完成...我认为