Yanıtlar:
Bu değişken, ikili günlüğe kaydetmenin güvenli olmayan olaylara neden olacak depolanmış işlevler oluşturmamaları için depolanan işlev yaratıcılarına güvenip güvenmeyeceğini denetler. Örneğin. UUID işlevlerine sahip.
Bu dokümantasyonda iyi açıklanmıştır:
Depolanmış bir işlev oluşturduğunuzda, işlevin deterministik olduğunu veya verileri değiştirmediğini bildirmeniz gerekir. Aksi takdirde, veri kurtarma veya çoğaltma için güvenli olmayabilir.
Varsayılan olarak, bir CREATE FUNCTION deyiminin kabul edilmesi için DETERMINISTIC, NO SQL veya READS SQL DATA'dan en az birinin açıkça belirtilmesi gerekir. Aksi takdirde bir hata oluşur:
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)
İşlev oluşturma ile ilgili önceki koşulları gevşetmek için (SUPER ayrıcalığına sahip olmanız ve bir işlevin deterministik olarak bildirilmesi veya verileri değiştirmemesi gerekir), global log_bin_trust_function_creators sistem değişkenini 1 olarak ayarlayın.
Referans: mysql-document (bunu örnekle açıkladığı gibi okuyun).
İkinci sorunuz hakkında, dinamikse ve sunucuyu yeniden başlattığınızda değişecekse:
Evet, dinamik bir değişkendir.
Yapılandırmayı değişikliği yansıtacak şekilde güncellemezseniz, değişken yeniden başlatma sonrasında değişecektir.
Referans: mysql-belgeler-tekrar
mysql> select if(1 is true,'TRUE','FALSE')\G *************************** 1. row *************************** if(1 is true,'TRUE','FALSE'): TRUE