здесь есть почта что спасает меня в прошлом об этой ошибке: http://forum.9kgames.com/default.aspx?g=posts&m=17
в моем случае я только должен был указать DETERMINISTIC
в функции создания:
CREATE DEFINER=`dynaccount`@`localhost` FUNCTION `stock_in_stock_ids`(_running_total_limit INT, _product_id INT, _group_id INT)
RETURNS TEXT
DETERMINISTIC
READS SQL DATA
надеюсь, что это помогает
UPDATE: ссылка не работает больше так вот копия archive.org: https://web.archive.org/web/20120310020353/http://forum.9kgames.com/default.aspx?g=posts&m=17
Это предупреждение растет, когда
а). Вы хотите создать сохраненную функцию и b). Поскольку сервер MySQL по умолчанию поддерживает репликацию, то есть BINARY LOGGING включается. Для решения этой проблемы есть несколько советов:
1). Для самой сохраненной функции. Когда вы создаете сохраненную функцию, вы должны объявить, что она детерминирована или что она не изменяет данные. В противном случае это может быть опасно для восстановления данных или репликации. По умолчанию для заявления CREATE FUNCTION
, которое должно быть принято, должно быть указано явно не менее одного из DETERMINISTIC
, NO SQL
или READS SQL DATA
. В противном случае возникает ошибка: Код:
ERROR 1418 (HY000): 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).
Эта функция является детерминированной (и не изменяет данные), поэтому он безопасен: Код:
CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
RETURN i;
END;
Эта функция использует UUID(), которая является не детерминированный, поэтому функция также не является детерминированным и не является безопасным: Код:
CREATE FUNCTION f2()
RETURNS CHAR(36) CHARACTER SET utf8
BEGIN
RETURN UUID();
END;
Эта функция изменяет данные, поэтому он не может быть в безопасности: Кода:
CREATE FUNCTION f3(p_id INT)
RETURNS INT
BEGIN
UPDATE t SET modtime = NOW() WHERE id = p_id;
RETURN ROW_COUNT();
END;
MySQL не проверяет, что функция, объявленная DETERMINISTIC свободна от заявлений, которые производят недетерминированные результаты. Хотя можно создать детерминированную сохраненную функцию без указания DETERMINISTIC
, вы не можете как MySQL 5.1.15 выполнить эту функцию с использованием двоичного ведения журнала на основе инструкций. Чтобы выполнить такую функцию, вы должны использовать бинарное журналирование на основе строк или смешанных. В качестве альтернативы, если вы явно укажете DETERMINISTIC в определении функции, вы можете использовать любой вид ведения журнала, включая ведение журнала на основе инструкций.
2) Несмотря на то, что вы завершили шаг 1, в большинстве случаев вам может потребоваться привилегия SUPER, чтобы установить глобальную переменную log_bin_trust_function_creators
как истину, а затем запустить для создания хранимой функции. Чтобы смягчить предыдущие условия на создание функции (у вас должна быть привилегия SUPER и что функция должна быть объявлена детерминированной или не изменять данные), установите для глобальной системной переменной log_bin_trust_function_creators
значение 1. По умолчанию эта переменная имеет значение 0, но вы можете изменить это так:
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
вы также можете установить эту переменную, используя опцию log_bin_trust_function_creators
при запуске сервера. Если двоичный журнал не включен, log_bin_trust_function_creators
не применяется. SUPER не требуется для создания функции, если, как описано ранее, значение DEFINER в определении функции не требует этого. Примечание. Если ваши приложения запускаются на сервере с несколькими арендаторами, а хостинговая компания не хочет этого делать, вам может потребоваться изменить хранимые процедуры вместо использования хранимых функций.
Ваша ссылка больше не доступна, делает ваш ответ непригодным к использованию. –
@FlipVernooij ссылка не работает, но ответ есть –
true, и она отвечает на проблему OP, но для кого-то, у кого есть такая же, но немного другая проблема (например, я), ответ ничего не объясняет по поводу проблемы и так бесполезно для всех остальных, кроме OP. –