DB에서 함수를 선언해야하는데 아래와 같은 에러가 발생했다.
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)
원인
함수 생성 시 DETERMINISTIC, NO SQL, READS SQL DATA 중 하나 이상의 특성을 선언해야하는데 없어서 에러가 발생한다고 한다. 또는 바이너리 로깅이 활성화된 상태에서 이러한 선언이 없는 함수를 생성하려고 하면 에러가 발생한다.
바이너리 로깅
바이너리 로깅은 데이터베이스에서 발생한 모든 변경 사항(INSERT, UPDATE, DELETE) 를 기록하는 기능이다. 이 로그를 통해 데이터베이스의 상태를 복원하거나 특정 시점으로 되돌릴 수 있다.
해결방법
아래 코드를 입력해보고, 결과를 확인한다.
show global variables like 'log_bin_trust_function_creators'
해당 설정이 OFF되어있으면 아래의 SET 코드를 이용해 설정을 ON 해준다.
set global log_bin_trust_function_creators = 1 -- ON
set global log_bin_trust_function_creators = 0 -- OFF
그런데 위 set SQL 문을 실행했더니 아래와 같은 에러가 발생했다. 말 그대로 내가 로그인한 DB 계정의 권한이 부족한 문제이다. 이 부분은 나 스스로 해결할수는 없는 부분이어서, 상급자분께 계정권한을 요청해 권한있는 계정으로 로그인하여 해결하였다.
Access denied; you need (at least one of) the SUPER, BINLOG ADMIN privilege(s) for this operation
해당 설정을 열어주니 성공적으로 function 을 생성할수있었다 !