This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA..

发布时间 2023-04-22 14:45:30作者: 释缘。

一个很烂的标题

原文链接:https://culturesun.site/index.php/archives/503.html

标题很长,但是还是有三个...表示省略。
这是一个MySQL自定义函数的报错信息。全部报错信息如下:

[note type="danger flat"]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)[/note]
中文大意就是使用百度翻译翻译翻译

[note-ico type="flat" ico="哈哈"]此函数的声明中没有DENTISTIC、NO SQL或READS SQL DATA,并且启用了二进制日志记录(您可能需要使用不太安全的log_bin_trust_function_creators变量)[/note-ico]

解决方法

使用chatgpt解决,啊哈哈。
这个警告是因为您的函数没有指定 DETERMINISTIC、NO SQL 或 READS SQL DATA 中的任何一个,而且二进制日志记录已启用。这意味着您的函数可能会对数据进行更改,但 MySQL 不知道它是否会更改数据,因此会发出警告。
为了解决这个问题,您可以在函数声明中添加 DETERMINISTIC、NO SQL 或 READS SQL DATA 中的一个或多个。这些关键字告诉 MySQL 函数的行为方式,从而使其能够更好地优化查询和避免不必要的警告。
如果您的函数不会更改数据,则可以将其声明为 NO SQL。如果您的函数会更改数据,则应该将其声明为 READS SQL DATA 或 MODIFIES SQL DATA,具体取决于函数的行为。
如果您不想看到这个警告,可以将 log_bin_trust_function_creators 变量设置为 1,这将允许您创建没有 DETERMINISTIC、NO SQL 或 READS SQL DATA 的函数,但这可能会降低 MySQL 的安全性。

小小结语

各个数据库之间的差异挺大的,甚至是SQL的使用,更别说自定义函数这些了。
以下是一篇关于MySQL自定义函数讲解很好的文章(至少我认为),很容易学会简单基础的自定义函数。
跳转链接在此