[DB] MySQL에서 자주 사용되는 configuration(my.conf)

MySQL을 사용하면서 자주 사용했던 2가지 configuration 옵션을 작성했다.


sql_mode

MySQL에서 sql_mode의 기본값은 아래와 같다.

1
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION


여기에서 ONLY_FULL_GROUP_BY 값이 있으면 GROUP BY절을 사용할 때 GROUP BY절에 명시한 컬럼 값을 SELECT절에 추가해 주어야 한다.

그렇지 않으면 SQL Error [1055] [42000]: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '...' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by라는 오류가 발생한다.

그래서 보통 ONLY_FULL_GROUP_BY 값을 빼고 사용한다.

my.conf

1
2
[mysqld]
sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'


또는

SQL

1
SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

group_concat_max_len

MySQL에서 group_concat_max_len의 기본값 1024이다.

group_concat_max_lenGROUP_CONCAT를 사용할 때 결괏값에 대한 최대 길이 옵션이다.

group_concat_max_len=1024라면 GROUP_CONCAT으로 연결된 결괏값이 최대 1024바이트를 초과할 수 없다. (UTF-8 인코딩 기준으로 문자열 약 1024자에 해당한다.)

이건 내가 경험했던 얘기이다.

이미지 경로를 img 태그의 src 속성에 넣고 GROUP_CONCAT으로 연결해서 데이터를 추출했다.

데이터의 값이 group_concat_max_len의 최대 길이를 초과하여 뒷부분 img 태그들의 값이 잘렸고, 이는 엑박으로 이어졌다.

이 때 group_concat_max_len 라는 옵션을 알게 되었고, 설정값을 수정하니 정상적으로 작동했다.

그래서 group_concat_max_len의 값은 기본값보다는 조금 늘려두는 게 좋을 것 같다.

my.conf

1
2
[mysqld]
group_concat_max_len = 300000


또는

SQL

1
SET GLOBAL group_concat_max_len = 300000;

Categories:

Updated:

Leave a comment