Mysql 函数确定性错误
Posted
技术标签:
【中文标题】Mysql 函数确定性错误【英文标题】:Mysql Function Deterministic Error 【发布时间】:2017-11-27 07:27:05 【问题描述】:我正在使用以下函数来拆分字符串。当我尝试在我的实时数据库上创建函数时出现以下错误:
此函数的声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录。
该函数实际上根本没有访问数据库。它所做的只是分解一个字符串。因此,如果我发送“1,2,3,4”,它会将它们分开。我如何克服这个错误?我实际上并没有修改任何表格。
DELIMITER ;;
CREATE FUNCTION `stringSplit`(
x VARCHAR(255),
delim VARCHAR(12),
pos INT) RETURNS varchar(255) CHARSET latin1
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, ',', pos),
LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), delim, '') ;;
DELIMITER ;
******更新******
我收到以下错误代码。
ERROR 1419 (HY000): You do not have the SUPER privilege and binary logging is enabled
我认为在 return 语句之前添加“DETERMINISTIC”是正确的。我认为这是处理特权的不同问题。
【问题讨论】:
为我工作。在此处查看:sqlfiddle.com/#!9/6e43c/5 也许您需要将分隔符更改为 //? 你得到的确切错误是什么? 正如错误消息告诉您的那样:如果启用了二进制日志记录,您的函数必须是DETERMINISTIC
(或其他两个之一)。由于您的函数实际上是确定性的,您需要做的就是通过在RETURN
前面添加单词DETERMINISTIC
(而不是returns
)来告诉mysql。
我收到以下错误代码。错误 1419 (HY000):您没有 SUPER 权限并且启用了二进制日志记录我认为在 return 语句之前添加“DETERMINISTIC”是正确的。我认为这是处理特权的不同问题。
【参考方案1】:
这是一个用户权限问题。我更改了用户并且代码与
Deterministic Return
添加到函数中。
【讨论】:
以上是关于Mysql 函数确定性错误的主要内容,如果未能解决你的问题,请参考以下文章
sybase 用户定义函数 - “非确定性”或“非法内置函数”错误
MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型