- MySQL Workbench 내에서 Function을 생성하는 중에 아래와 같은 에러가 발생하였습니다.
ERROR 1418: 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)
💡 오류 발생 SQL문
- 아래와 같이 정상적으로 구성이 된 함수에서 아래의 오류가 발생하였습니다.
CREATEFUNCTION `f_rand1`(_str VARCHAR(255))
RETURNSvarchar(31)
BEGINdeclare v_ret VARCHAR(31);
declare v_len tinyint;
set v_len =char_length(_str);
set v_ret =substring(_str, CEIL(rand() * v_len), 1);
RETURN v_ret;
END
- 해당 오류는 DETERMINISTIC, NO SQL 또는 READS SQL DATA 등의 속성 중 하나를 선언하지 않았을 때 발생합니다. - 이러한 속성들은 함수가 어떤 방식으로 데이터베이스와 상호작용하는지를 명시하는데, 이들이 없으면 함수가 예상치 못한 방식으로 데이터베이스에 영향을 미칠 수 있습니다.
속성
설명
DETERMINISTIC
함수가 항상 동일한 결과를 반환한다는 것을 나타냅니다. 즉, 동일한 입력에 대해 동일한 출력이 보장됩니다.
- log_bin_trust_function_creators는 MySQL 서버 시스템 변수입니다. - 이 변수가 0으로 설정되어 있으면 (기본값), MySQL은 스토어드 함수 또는 트리거가 DETERMINISTIC, NO SQL, 또는 READS SQL DATA 속성 중 하나를 갖도록 요구합니다. - 이는 바이너리 로깅이 활성화된 경우에만 적용됩니다. 이 변수를 1로 설정하면, 이러한 요구사항을 무시하고 스토어드 함수 또는 트리거를 생성할 수 있습니다.