MySQL 8 deterministic function

Nicht nur bei der Datenbank Wiederherstellung, auch bei Funktionen die nicht deterministisch sind.

Folgende Funktion ist nicht deterministisch:

CREATE FUNCTION func_count_something(p_someid INT) RETURNS INTEGER
BEGIN

    DECLARE some_count INTEGER;
    SELECT COUNT(*)
    INTO artikel_count
    FROM some_table
    WHERE someid = p_someid;
    RETURN some_count;
END;

Fehlermeldung bei der Erstellung:

[HY000][1418] 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)

Gleiche Funktion – deterministisch:

CREATE FUNCTION func_count_something(p_someid INT) RETURNS INTEGER
-- this two lines do the trick
    DETERMINISTIC
    READS SQL DATA
BEGIN

    DECLARE some_count INTEGER;
    SELECT COUNT(*)
    INTO artikel_count
    FROM some_table
    WHERE someid = p_someid;
    RETURN some_count;
END;

dev.mysql.com – 25.7 Stored Program Binary Logging

Helfen würde auch ein:

SET GLOBAL log_bin_trust_function_creators = 1;

zur Erstellungszeit einer FUNCTION.