问题描述
我的 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 个问题:
非常感谢您的建议。
解决方法
问题是由向数据库写入空值引起的。如果在表单中允许空值,则将其保存为空字符串“”。但是,如果数据库中的字段是 INT 或 DOUBLE 类型,则会导致错误。要解决此问题,需要将数据库表中的字段更改为 VARCHAR 类型。另一种选择是将查询更改为将空字符串写入 INT、DOUBLE 类型的 0 值。将字段类型更改为 VARCHAR 是更简单的解决方案。