Maria DB 10.1 DATETIME空白值

时间:2017-01-23 23:36:36

标签: mysql string datetime

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

UPDATE ontime_assets
SET AssetName = '117 J19', PlateDate = '20161224', InspectionDate = ''
WHERE AssetID = 7;

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

  

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

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

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

2 个答案:

答案 0 :(得分:3)

好的,我整晚都在睡觉,但我明白了!

在etc / my.cnf文件中配置了一个名为SQL_MODE的设置,并且如果数据库是从usr / my.cnf文件中的先前版本升级的(这对于等文件来说太过挫折,但是我找到了!)。

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

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

答案 1 :(得分:0)

  

有没有人知道MariaDB设置它是什么允许此查询当前工作但在新服务器上设置不同?

没有。如果InspectionDate列为datetime,则不允许分配空字符串。最有可能的是,查询之前已在运行,因为InspectionDate是一个文本列。这是没有吸引力的,因为那样你就无法利用数据库所具有的日期功能。

只需将NULL作为占位符分配给InspectionDate列,而不是分配空字符串:

UPDATE ontime_assets
SET AssetName = '117 J19',
    PlateDate = '20161224',
    InspectionDate = NULL
WHERE AssetID = 7

如果您需要帮助更新脚本,也许这里有人可以为您提供正则表达式,以InspectionDate = ''选择性地替换InspectionDate = NULL