![mysql](https://dev.hi.ne.kr/wp-content/uploads/2022/09/y9kosyowyau-1024x690.jpg)
개발환경을 로컬 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의 버전도 동일했다.
![docker](https://dev.hi.ne.kr/wp-content/uploads/2022/09/hsacbyjzsqq-1024x640.jpg)
어떤 차이 때문에 그러는지 구글링 해보니 로컬에서 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)
이후 페이지를 접속하니 이상없이 잘 처리된다.
참고 링크
![](https://cdn.sstatic.net/Sites/stackoverflow/Img/apple-touch-icon@2.png?v=73d79a89bded)
P.S. 아뿔싸..
컨테이너를 재시작하니 리셋되버렸다.
이에 대한 해결책은 아래 포스팅에서 확인바란다.
One thought on “MySQL Error : Expression #1 of ORDER BY clause”