2017-06-23 52 views
0

我正在使用下面的函數來分割一個字符串。當我嘗試在我的實時數據庫上創建函數時,出現以下錯誤:Mysql函數確定性錯誤

該函數在其聲明中沒有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'是正確的。我認爲這是一個涉及特權的問題。

+0

適合我。在這裏看到:http://sqlfiddle.com/#!9/6e43c/5也許你需要改變你的分隔符爲//? –

+0

你正在得到什麼確切的錯誤? –

+2

就像錯誤信息告訴你:如果啓用二進制日誌記錄,你的函數必須是'DETERMINISTIC'(或其他兩個中的一個)。由於你的函數實際上是確定性的,所以你所要做的就是告訴MySQL,通過在'RETURN'(而不是'returns')的前面添加'DETERMINISTIC'這個詞。 – Solarflare

回答

0

這是一個用戶權限問題。我改變了用戶,代碼與

Deterministic Return 

添加到該功能。