Maria DB 10.1 DATETIME 空白值

Com*_*ion 4 mysql string datetime

我支持旧版 PHP 系统。他们正计划移动数据库服务器。我们目前使用的是 MariaDB 10.1,新服务器也是 MariaDB 10.1。我有数百个(或数千个)如下所示的查询:

UPDATE ontime_assets
SET AssetName = '117 J19', PlateDate = '20161224', InspectionDate = ''
WHERE AssetID = 7;
Run Code Online (Sandbox Code Playgroud)

在当前数据库上,这个过程很好。在新的我得到这个错误:

更新记录时出错:日期时间值不正确:第 1 行的“InspectionDate”列的“”。

他们告诉我数据库已迁移并且结构相同,但显然不是。InspectionDate是不需要的 DATETIME,并设置为接受 NULL 值。

代码好不好,重写代码取出空字符串是行不通的。有谁知道它是什么 MariaDB 设置,这将允许此查询当前工作,但会在新服务器上设置不同?

Com*_*ion 7

好吧,我整晚都没有睡,但我想通了!

在 etc/my.cnf 文件中配置了一个名为 SQL_MODE 的设置,并且如果数据库是从 usr/my.cnf 文件中的先前版本升级的(这使 etc 文件变得非常沮丧,但我找到了它! )。

您可以通过运行查询找到您的 sql_mode 设置:SELECT @@sql_mode;

OLD DB 没有设置 STRICT_TRANS_TABLES,NEW DB 设置了,因此新数据库上的空字符串日期错误,而不是旧的。我从 usr 和其他 my.cnf 文件中取出了 STRICT_TRANS_TABLES 并让它们回收了 mysql 服务器进程,然后发现代码就像在旧盒子上一样工作!

  • 仅仅因为您忽略错误并不意味着错误不再存在。不过侦探工作不错。 (2认同)