咨询电话:
15628812133
01
2024/05

在使用MySql自己定义的函数时报错:This function has none of DETERMINISTIC......

发布时间:2024-05-01 15:55:41
发布者:已经写了
浏览量:
0

在之前处理数据库查询JSON数据UNICODE编码的字符在查询的结果转换成中文的之后,因为查询中处理需要写很长得代码来实现想要的结果,所以我就想着把这个过程写成一个函数来简化代码,方便使用。

那么就要介绍一下MYSQL的函数了,mysql的函数有两种一种是存储过程,另外一种就是函数,其中,函数(UDF)必须返回一个值。函数的返回值类型在创建函数时定义,并且函数的主体必须包含一个有效的返回语句。存储过程可以没有返回值,也可以返回多个值(通过输出参数或结果集)。它们主要用于执行操作,而不是计算并返回一个值。

函数可以从SQL语句的任何位置调用,就像在查询中使用的内置函数(如CONCAT(), LENGTH()等)一样。

存储过程通常通过CALL语句来调用,并且不能直接在SQL语句中作为表达式的一部分使用。

今天在创建函数的时候,报了个错This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled。

报错的原因是啥呢,是因为数据库开启了bin-log, 我们就需要指定函数的特性DETERMINISTIC、NO SQL或READS SQL DATA这三个特性之一。

以下是这三个特性的简要说明:

DETERMINISTIC:表明函数对于相同的输入总是返回相同的输出。如果函数是确定的,那么MySQL可以安全地将其结果缓存起来,并在二进制日志中记录函数名和其参数,而不是实际的结果值。

NO SQL:表明函数不包含任何SQL语句。如果函数不包含SQL语句,那么它不会修改数据库中的数据,也不会受到并发执行的其他事务的影响。

READS SQL DATA:表明函数包含读取数据的SQL语句,但不包含修改数据的语句。这意味着函数可能会读取数据库中的值,但不会修改它们。

在使用MySql自己定义的函数时报错:This function has none of DETERMINISTIC......

如果不想这样的话也可以在配置文件中配置log_bin_trust_function_creators=1来关闭。

也可以通过执行sql语句:SET GLOBAL log_bin_trust_function_creators = 1。

关键词:
返回列表