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 函数确定性错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 MySQL 中确定错误类型

确定邮政编码邻近/范围的 MySQL 函数

sybase 用户定义函数 - “非确定性”或“非法内置函数”错误

如何确定 utf8 数据编码错误并在 MySql 中更正?

MySQL Workbench 从 SQL Server 2008 迁移到 MySQL:错误:确定要复制的行数:不支持的操作数类型

用户定义的函数 SQL Server 2005 被错误地标记为非确定性?