개발환경을 로컬 Win10 환경에서 Docker로 이전한 후 기존에 잘 나오던 화면에서 오류가 발생하며 404페이지로 넘어갔다.
Exception Message >> SQL search error – Expression #1 of ORDER BY clause is not in SELECT list, references column ‘blabla.item_t0.p_date’ which is not in SELECT list; this is incompatible with DISTINCT query
해당 부분의 소스는 변경된 것이 없고, docker로 옮기면서 mysql의 버전이 변경되어서 그런가 확인해보니 mysql의 버전도 동일했다.
어떤 차이 때문에 그러는지 구글링 해보니 로컬에서 mysql을 사용할 때는 설치형이 아닌 압축버전을 사용하면서 직접 my.inf를 구성했고 도커에 구성할때는 도커허브의 이미지를 사용하여 구성했기 때문에 기본 sql-mode의 값이 달라서 해당 현상이 발생한 것으로 보이며 해결 방법은 다음과 같다.
1. my.cnf 또는 my.inf파일에서 sql-mode속성값을 제거
[mysqld]
sql-mode=""
2. 또는 mysql접속 후 다음 쿼리를 실행한다. 내 경우 재기동없이 적용되었다.
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
mysql> SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Query OK, 0 rows affected (0.00 sec)
mysql> SET SESSION sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
Query OK, 0 rows affected (0.00 sec)
확인은 다음과 같이 할 수 있다.
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
mysql> SELECT @@GLOBAL.sql_mode;
+------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.sql_mode |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT @@SESSION.sql_mode;
+------------------------------------------------------------------------------------------------------------------------+
| @@SESSION.sql_mode |
+------------------------------------------------------------------------------------------------------------------------+
| STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
이후 페이지를 접속하니 이상없이 잘 처리된다.
참고 링크
P.S. 아뿔싸..
컨테이너를 재시작하니 리셋되버렸다.
이에 대한 해결책은 아래 포스팅에서 확인바란다.
One thought on “MySQL Error : Expression #1 of ORDER BY clause”