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

Linda Hamilton
发布: 2024-11-01 10:44:30
原创
985 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!