导入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;
方法二:配置mysql.ini文件
log_bin_trust_function_creators = 1;
通过将此值设置为1,可以放宽检查非确定性函数。应谨慎使用此选项,因为它可能会损害数据的完整性。
了解确定性函数
为了避免将来出现此错误,需要采用更好的方法是对存储函数使用确定性声明。这些声明告知 MySQL 该函数对于相同的输入参数是否总是产生相同的结果。以下是不同的确定性声明:
DETERMINISTIC:
不是确定性:
READS SQL DATA:
不SQL:
CONTAINS SQL:
选择正确的声明
为函数选择正确的声明取决于其行为。如果函数的输出取决于数据库外部的因素,例如当前时间或随机数生成器,则应将其声明为 NOT DETERMINISTIC。如果函数仅读取数据,则可以将其声明为 READS SQL DATA。如果函数不包含任何SQL语句,可以声明为NO SQL。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3