将 MySQL5.6 更新到 MariaDB10.3 后出现致命错误 - 由 sql 严格模式引起?

问题描述

我的 ISP 已更新托管我的应用程序的共享服务器。它涉及从 MysqL 5.6 到 MariaDB 10.3 的更新。 ISP 写道:MariaDB 在很大程度上与 MysqL 兼容,并且大多数 Web 应用程序都被编写为与 MariaDB 一起工作得很好。换句话说,它们不会受到最小差异的影响。

但是,自从更新后,我的许多 EDIT 和 INSERT 不再起作用并产生致命错误。在我的搜索中,我发现:

  • 问题在于写入数据库
  • 似乎在并非所有字段都具有值而我的应用程序中允许空字段时发生

在进一步调查中,我发现: https://forums.cpanel.net/threads/mariadb-10-2-disabling-strict-mode.635157/ 根据此线程,我了解解决方案可能是从以下位置更改服务器设置中的 sql 模式:

STRICT_TRANS_TABLES、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION

到:

NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

我试图通过 DirectAdmin/PHPAdmin 变量来改变它。由于它是共享服务器,因此我无法更改设置,因此无法检查(需要超级权限)。

我现在有 3 个问题:

  1. 这会是解决方案吗?在这种情况下,我会要求我的 ISP 更改此设置。
  2. 这是解决问题的最佳方法吗?
  3. 我可以用其他方式解决这个问题吗?

非常感谢您的建议。

解决方法

问题是由向数据库写入空值引起的。如果在表单中允许空值,则将其保存为空字符串“”。但是,如果数据库中的字段是 INT 或 DOUBLE 类型,则会导致错误。要解决此问题,需要将数据库表中的字段更改为 VARCHAR 类型。另一种选择是将查询更改为将空字符串写入 INT、DOUBLE 类型的 0 值。将字段类型更改为 VARCHAR 是更简单的解决方案。