mysql报错ERROR 1418 (HY000)

mysql报错:ERROR 1418 (HY000): 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),如何解决?

已邀请:
根据上面的提示能看出来,这是我们开启了bin-log, 我们就必须指定我们的函数是否是上述提示信息中的 “DETERMINISTIC (不确定的)”,“ NO SQL (没有SQl语句,当然也不会修改数据)”,“ READS SQL DATA (只是读取数据,当然也不会修改数据)”,“ MODIFIES SQL DATA 要修改数据” ,“CONTAINS SQL (包含了SQL语句)”。
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。
在MySQL中创建函数时出现上述错误的解决方法,如下:
mysql> SHOW VARIABLES LIKE 'log_bin';                 #在MySQL8.0中,log_bin被打开了,在MySQL5.7之前的版本是关闭状态的!
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)

mysql>
mysql> SHOW VARIABLES LIKE '%trust%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set (0.00 sec)

mysql>
mysql> set global log_bin_trust_function_creators=TRUE;      #由于开启了log_bin功能,因此我们需要将创建函数的功能手动开启

Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> SHOW VARIABLES LIKE '%trust%';                
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set (0.00 sec)

mysql>
mysql>
mysql> set global log_bin_trust_function_creators=TRUE;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> CREATE FUNCTION hello(str CHAR(30))
-> RETURNS CHAR(50)
-> RETURN CONCAT('Hello,',str,'!');
Query OK, 0 rows affected (0.00 sec)

mysql>

要回复问题请先登录注册