[컴][db] MySQL mode, only_full_group_by

 strict mode / 안되는 이유/ 에러가 나오지 않는다.

MySQL mode, only_full_group_by

# test 용
[mysqld]
...
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ONLY_FULL_GROUP_BY"

ONLY_FULL_GROUP_BY option 으로 인해 group_by 시점에 select 부분에도 aggregation 을 모두 걸어줘야 한다. 그렇지 않으면 아래 같은 error 가 발생한다.

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mytable.created_at' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by (SQL: select ...)

확인 방법

global 용

SHOW VARIABLES LIKE '%sql_mode%';

SET sql_mode = '';

session 용

-- write
SET @@SESSION.sql_mode = '';

-- read
SELECT @@SESSION.sql_mode;

Maria DB 와 MySQL 의 차이

이것때문에 한참을 해멨다. 기본적으로 MariaDB 는 group by 관련해서 SELECT 에 대해서만 error 를 내보낸다. 하지만 MySQL 은 select list, HAVING condition, ORDER BY 에 대해서 전부 error 를 내보낸다.

strict mode

댓글 없음:

댓글 쓰기