1418: Function has none of DETERMINISTIC, NO SQL, or READS SQL DATA (binary logging enabled)(関数に DETERMINISTIC、NO SQL、READS SQL DATA のいずれもない (バイナリログ有効))
MySQL意味
ストアドファンクションを作成しようとしたが、バイナリログが有効で、関数が決定性/データアクセスのいずれの特性も宣言されていない。レプリケーションの安全性の観点からあいまいなため、MySQL はそのような関数を拒否する。
原因
log_bin が ON かつ log_bin_trust_function_creators=OFF の状態で、DETERMINISTIC、NO SQL、READS SQL DATA のいずれの特性もなしに関数が定義された。これらの特性がないと、MySQL は関数がレプリカで同じ結果を生成すると確信できない。
対処方法
関数の動作を正しい特性で宣言する: 本当に決定的であれば DETERMINISTIC を、データにアクセスしなければ NO SQL を、読み取りのみであれば READS SQL DATA を追加する。関数が安全であると確信できる場合は、一元的なポリシーとして log_bin_trust_function_creators=1 を設定することもできる。ただし、特性を正しく宣言するのが最も安全な方法である。特性が関数の実際の動作と一致していることを確認する。