MySQL Error : Expression #1 of ORDER BY clause

db
mysql

개발환경을 로컬 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
docker

어떤 차이 때문에 그러는지 구글링 해보니 로컬에서 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. 아뿔싸..
컨테이너를 재시작하니 리셋되버렸다.
이에 대한 해결책은 아래 포스팅에서 확인바란다.

생계형 특급 개발자이자 아들 하나 있는 평범한 아빠. 취미는 요리, 캠핑, 뮤직 페스티발 다니기 등이지만 이 블로그에는 주로 개발관련된 내용만 올릴 예정입니다. 워드프레스를 시작한지 얼마 되지않아 사이트가 허전하지만 좋은 내용으로 채우도록 노력하겠습니다. 자주 놀러오세요 ^^
Posts created 54

One thought on “MySQL Error : Expression #1 of ORDER BY clause

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Posts

Begin typing your search term above and press enter to search. Press ESC to cancel.

Back To Top