dbwebb-se / databas

Course repo for database course (dbw).
Other
4 stars 2 forks source link

This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA #19

Open mosbth opened 3 years ago

mosbth commented 3 years ago

Ett felmeddelande inträffar när man läser in en backupfil till MySQL. Backupfilen kan vara genererad från MariaDB eller MySQL.

ERROR 1418 (HY000) at line 426: 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)

Du försöker läsa in en backupfil som saknar en nödvändig deklaration i en funktion.

Eventuellt fungerar detta på ett system om man anger en specifik inställning i sin databas rörande "log_bin_trust_function_creators", men då kräver att den som skall använda backupfilen har samma inställning på sin databas.

De som rättar i denna kursen har inte den inställningen, så alla funktioner bör alltså deklareras med funktionens karaktäristik.

I denna artikel förklaras hur man lägger till karaktäristik till en funktion. https://dbwebb.se/kunskap/egen-definierade-funktioner-i-databas#karaktar

Det finns ett längre utlägg om detta felmeddelandet i forumet: Error Code: 1418. This function has none of DETERMINISTIC... https://dbwebb.se/forum/viewtopic.php?t=8419

mosbth commented 3 years ago

Det är alltså inte en lösning att göra:

"SET GLOBAL log_bin_trust_function_creators = 1;" verkar ha löst det

Det blir en inställning lokalt i din egen databasserver. När rättaren får din kod kommer de ha samma problem och kommer (högst troligen) inte har den inställningen som du gjort.

Om du har satt log_bin_trust_function_creators = 1 så kan du sätta tillbaka den till 0, vilket är dess defaultvärde.

SET GLOBAL log_bin_trust_function_creators = 0;

Du kan kontrollera dess nuvarande värde.

mysql> SELECT @@log_bin_trust_function_creators;
+-----------------------------------+
| @@log_bin_trust_function_creators |
+-----------------------------------+
|                                 0 |
+-----------------------------------+
1 row in set (0.00 sec)