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

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

Barbara Streisand
发布: 2024-11-03 20:18:29
原创
280 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板