MySQL5でストアドファンクション
勉強がてらMySQL5をいじっていたのですがマニュアル通りに書かれているSQLを入力してもエラーが出てファンクションが作成されませんでした><
入力したSQL
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> RETURN CONCAT('Hello, ',s,'!');
エラー出力
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)
MySQL5.0.16から導入されたオプションであるlog_bin_trust_function_creatorsが問題のようです。
このオプションはバイナリログが有効なときに適用され、ストアドファンクションを作成時に宣言を必要とするか
しないかを制御するものみたいです。
参考:MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 12.4 ストアドルーチンとトリガのバイナリログ
log_bin_trust_function_creators = 0のときはストアドファンクションに対して下記3つのいずれかの特性を持つよう明示してやる必要があるみたい。
最初に書いたSQLを設定を変えずに動かそうと思うならこんな感じ。
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
-> DETERMINISTIC RETURN CONCAT('Hello, ',s,'!');
俺はメンドクサイからオプション変えました。。なんかセキュリティ的に問題あるんだろうか。