解决mysql报错This function has none of DETERMINISTIC问题

文 / @WordPress主题

解决mysql报错ThisfunctionhasnoneofDETERMINISTIC问题

在使用mysql的过程中,可能会遇到报错ThisfunctionhasnoneofDETERMINISTIC问题,具体表现为在创建存储过程时会出现以下的错误信息:ERROR1418(HY000):ThisfunctionhasnoneofDETERMINISTIC,NOSQL,orREADSSQLDATAinitsdeclarationandbinaryloggingisenabled(you*might*wanttousethelesssafelog_bin_trust_function_creatorsvariable)。该问题的出现主要是因为我们开启了bin-log,而函数没有设置DETERMINISTIC、NOSQL或READSSQLDATA参数信息。

本文将向大家介绍解决该问题的方法:

一、前置知识

在解决该问题之前,需要了解几个概念:

1. DETERMINISTIC:表示函数具有确定性,即输入相同的参数得到的结果也相同,不涉及服务器状态,不会因为改变参数或者任何其他环境而对返回结果造成影响。

2. NOSQL:表示函数不使用SQL语句。

3. READSSQLDATA:表示函数只读取数据,不修改数据。

二、解决方法

1. 查看log_bin_trust_function_creators参数值

首先需要查看log_bin_trust_function_creators参数值,该参数表示是否信任非确定性函数创建者。可以使用以下命令查看该参数的值:

mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
|Variable_name|Value|
+---------------------------------+-------+
|log_bin_trust_function_creators|OFF|
+---------------------------------+-------+

2. 设置log_bin_trust_function_creators参数值

根据报错提示,需要设置log_bin_trust_function_creators参数值为1。可以使用以下命令设置该参数值:

mysql> set global log_bin_trust_function_creators=1;
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
|Variable_name|Value|
+---------------------------------+-------+
|log_bin_trust_function_creators|ON|

设置成功后,再次执行创建存储过程的命令即可。

需要注意的是,上述设置只是临时的,如果mysqld重启,该参数值又会恢复为默认值,因此建议在my.cnf配置文件中添加log_bin_trust_function_creators=1来永久修改该参数值。

三、结语

本文向大家介绍了解决mysql报错ThisfunctionhasnoneofDETERMINISTIC问题的方法,希望可以帮助到大家。如果您还有其他问题,可以在php中文网进行搜索或请教其它程序员。

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。