首页  >  文章  >  数据库  >  如何解决MySQL中的“1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\”错误?

如何解决MySQL中的“1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\”错误?

Linda Hamilton
Linda Hamilton原创
2024-11-01 10:44:30986浏览

How to Solve the

导入 MySQL 数据库时,您可能会遇到错误“1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and二进制日志记录已启用(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)。”当您未指定数据库中函数的确定性时,就会出现此错误。

要解决此错误,您可以使用以下两种方法之一:

方法 1:暂时禁用二进制日志记录

SET GLOBAL log_bin_trust_function_creators = 1;

方法 2:配置 mysql.ini 文件

log_bin_trust_function_creators = 1;

通过将此值设置为 1,您可以放宽检查非确定性函数。应谨慎使用此选项,因为它可能会损害数据的完整性。

了解确定性函数

为了避免将来出现此错误,有更好的方法是对存储函数使用确定性声明。这些声明告知 MySQL 该函数对于相同的输入参数是否总是产生相同的结果。以下是不同的确定性声明:

DETERMINISTIC:

  • 对于相同输入参数始终产生相同结果的函数。

非确定性:

  • 对于相同的输入参数并不总是产生相同结果的函数。如果没有显式声明,MySQL 默认为 NOT DETERMINISTIC。

读取 SQL 数据:

  • 仅从数据库读取数据的函数。

NO SQL:

  • 不包含任何 SQL 语句的函数。

CONTAINS SQL:

  • 包含 SQL 指令但既不读取也不写入数据的函数。

选择正确的声明

选择正确的声明函数的声明取决于其行为。如果函数的输出取决于数据库外部的因素,例如当前时间或随机数生成器,则应将其声明为 NOT DETERMINISTIC。如果函数仅读取数据,则可以将其声明为 READS SQL DATA。如果函数不包含任何SQL语句,可以声明为NO SQL。

以上是如何解决MySQL中的“1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn