在mysql中导入数据库时,出现以下错误:

1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

我不知道我需要改变什么.有谁能帮我解决这个问题吗?

推荐答案

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

  1. 在MySQL控制台中执行以下操作:

    SET GLOBAL log_bin_trust_function_creators = 1;

  2. 将以下内容添加到mysql.ini配置文件:

    log_bin_trust_function_creators = 1;

该设置放松了对非确定性函数的判断.非确定性函数是修改数据的函数(即具有update、insert或delete语句).有关更多信息,请参阅here.

请注意,如果未启用二进制日志(log)记录,则此设置不适用.

Binary Logging of Stored Programs

如果未启用二进制日志(log)记录,则log_bin_trust_function_creators会启用

log_bin_trust_function_creators

启用二进制日志(log)记录时,此变量适用.

最好的方法是更好地理解和使用存储函数的确定性声明.MySQL使用这些声明来优化复制,仔细 Select 它们以实现健康的复制是一件好事.

DETERMINISTIC

NOT DETERMINISTIC

我个人在MySQL 5.5中遇到了一个错误,如果没有声明,那么我总是至少声明一个"确定性"、"非确定性"、"无SQL"或"读取SQL数据",而不管我可能有其他声明.

READS SQL DATA

MODIFIES SQL DATA

NO SQL

CONTAINS SQL

请注意,有些MySQL函数不是确定性安全的,例如:NOW()、UUID()等,它们可能会在不同的机器上产生不同的结果,因此包含此类指令的用户函数必须声明为非确定性.

Assessment of the nature of a routine is based on the “honesty” of the creator: MySQL does not check that a routine declared DETERMINISTIC is free of statements that produce nondeterministic results. However, misdeclaring a routine might affect results or affect performance. Declaring a nondeterministic routine as DETERMINISTIC might lead to unexpected results by causing the optimizer to make incorrect execution plan choices. Declaring a deterministic routine as NONDETERMINISTIC might diminish performance by causing available optimizations not to be used.

Mysql相关问答推荐

SQL - Select 复合主键,条件为其中一个主键

使用NOT EXISTS()时出现MySQL查询错误

MySQL全文索引和不区分大小写搜索带来的挑战

在MySQL中使用FIRST_VALUE()

如何从MySQL数据库中提取入职第一个月的工作天数?

MySQL-带有用户定义变量的IF-THEN语句

查询优化并提高性能

获取每个参数的记录,不重复

mysqli 无法以非 root 用户身份连接

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

查询给出错误时的 mySQL Group_Concat 和 Case

Golang Gorm没有从关联表中检索数据

mysql - 如何加入表中的动态列

使用 MySQL LIMIT、OFFSET 进行分页

如何在 Laravel 5.1 中获取数据库中的表列表

PDO:MySQL 服务器已消失

电话号码和地址的mysql数据类型

如何将本地托管的 MySQL 数据库与 docker 容器连接

为什么 GRANT 在 MySQL 中不起作用?

SELECT INTO 和未声明的变量错误