首页 >数据库 >mysql教程 >为什么在启用二进制日志记录的情况下 MySQL 会抛出'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?

为什么在启用二进制日志记录的情况下 MySQL 会抛出'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?

Barbara Streisand
Barbara Streisand原创
2024-11-03 20:18:29273浏览

Why Does MySQL Throw

错误:启用二进制日志记录的函数声明中缺少“DETERMINISTIC、NO SQL 或 READS SQL DATA”

导入数据库时MySQL,遇到错误“1418 (HY000):此函数在其声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录”表示有问题的函数缺少适当的声明。

解决方法:

有两种方法可以解决此问题:

  1. 执行 MySQL 控制台命令:

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    此命令放宽了对非确定性函数的检查,允许导入继续进行。

  2. 配置 mysql.ini:
    添加将以下行添加到 mysql.ini 配置文件中:

    log_bin_trust_function_creators = 1

说明:

二进制日志记录对数据库所做的所有修改。默认情况下,MySQL 要求修改数据的函数在其声明中声明为 DETERMINISTIC、NO SQL 或 READS SQL DATA,以确保它们可以准确复制。

存储函数的确定性声明:

这些声明告知 MySQL 函数的性质,指导优化和复制决策。

  • DETERMINISTIC: 始终产生相同结果的函数相同的输入,无论外部因素如何。
  • 非确定性: 对于相同输入可以产生不同结果的函数,例如包含非确定性 MySQL 函数的函数(例如 NOW() , UUID())。
  • 读取 SQL 数据: 从数据库读取数据而不修改数据的函数。
  • NO SQL: 函数不包含 SQL 语句。

注意: 如果禁用二进制日志记录,则 log_bin_trust_function_creators 设置不适用。因此,确保指定适当的确定性声明至关重要。

通过实施提供的解决方案之一,您可以解决错误并继续数据库导入。

以上是为什么在启用二进制日志记录的情况下 MySQL 会抛出'DETERMINISTIC、NO SQL 或 READS SQL DATA”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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