strict mode / 안되는 이유/ 에러가 나오지 않는다.
MySQL mode, only_full_group_by
- mysql - SELECT list is not in GROUP BY clause and contains nonaggregated column …. incompatible with sql_mode=only_full_group_by - Stack Overflow
SELECT @@sql_mode;
로 현재 mode 를 확인할 수 있다.SELECT @@GLOBAL.sql_mode;
- local 에서 test 를 할려면 my.ini 를 수정 해서 하도록 하자.
# 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 and other MySQL customizations in Laravel 5.2 | MattStauffer.com
- MySQL :: MySQL 5.7 Reference Manual :: 5.1.10 Server SQL Modes
댓글 없음:
댓글 쓰기