Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 시스템 변수 max_allowed_packet이 문자열 함수 결과에 미치는 영향

max_allowed_packet과 문자열 함수의 관계

MySQL에서 문자열 값을 반환하는 함수는 연산 결과의 길이가 시스템 변수 max_allowed_packet의 설정값을 초과할 경우 NULL을 반환합니다. 즉, CONCAT나 REPEAT와 같은 문자열 함수가 아무리 큰 결과를 생성할 수 있더라도 그 길이가 허용된 패킷 크기를 넘어서면 오류 메시지 대신 NULL이 돌아오게 됩니다.

max_allowed_packet 변수의 주요 특징

max_allowed_packet은 동적(dynamic) 전역 변수로서 정수형 값을 입력받으며, 이 값은 세션 단위로만 설정할 수 있습니다. 이 변수가 가질 수 있는 값의 범위는 다음과 같습니다.

  • 최솟값: 1024
  • 최댓값: 1073741824 (약 1GB)
  • 기본값: 1048576 (1MB)

동작 예시

예를 들어 REPEAT('a', 2000000)처럼 결과 길이가 기본값인 1MB(1048576바이트)를 초과하는 문자열을 생성하면, 서버는 해당 결과를 NULL로 반환합니다. 이런 경우 SET SESSION max_allowed_packet = 16777216;과 같이 세션의 값을 더 크게 조정해 주면 의도한 결과를 정상적으로 얻을 수 있습니다.

따라서 대용량 문자열 데이터를 다루는 쿼리에서 예기치 않은 NULL이 반환된다면, 먼저 max_allowed_packet 설정값과 결과 문자열의 길이를 확인해 보는 것이 좋습니다.