将 MySQL5.6 更新到 MariaDB10.3 后出现致命错误 - 由 sql 严格模式引起?
Fatal error after update MySQL5.6 to MariaDB10.3 - caused by sql strict mode?
我的 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个问题:
- 这是解决方案吗?在这种情况下,我会要求我的 ISP 更改此设置。
- 这是解决问题的最佳方法吗?
- 我可以用其他方法解决这个问题吗?
非常感谢您的建议。
问题是由向数据库写入空值引起的。如果在表单中允许空值,则将其保存为空字符串“”。但是,如果数据库中的字段是 INT 或 DOUBLE 类型,则会导致错误。要解决此问题,需要将数据库表中的字段更改为 VARCHAR 类型。另一种选择是将查询更改为将空字符串写入 INT、DOUBLE 类型的 0 值。将字段类型更改为 VARCHAR 是更简单的解决方案。
我的 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个问题:
- 这是解决方案吗?在这种情况下,我会要求我的 ISP 更改此设置。
- 这是解决问题的最佳方法吗?
- 我可以用其他方法解决这个问题吗?
非常感谢您的建议。
问题是由向数据库写入空值引起的。如果在表单中允许空值,则将其保存为空字符串“”。但是,如果数据库中的字段是 INT 或 DOUBLE 类型,则会导致错误。要解决此问题,需要将数据库表中的字段更改为 VARCHAR 类型。另一种选择是将查询更改为将空字符串写入 INT、DOUBLE 类型的 0 值。将字段类型更改为 VARCHAR 是更简单的解决方案。