in 연산자

where 에서 in 연산자를 종종 쓰는데, 이번에도 쓰다가 문득 궁금해졌다. in ()에 들어가는 값은 몇개까지 허용되는가?

찾아보니, 갯수제한은 없고 용량제한이 있다고 한다.

The maximum size of one packet or any generated/intermediate string, or any parameter sent by the mysql_stmt_send_long_data() C API function. The default is 64MB.

max_allowed_packet에 설정된 값에 제한을 받을 뿐이라고 한다. 기본값이 64메가니까 어지간해선 넘어설 일이 없어보인다.

서버 설정파일을 열어볼 수 없는 상황이라면, 아래 쿼리로 max_allowed_packet의 값을 볼 수 있다.

SHOW VARIABLES LIKE 'max_allowed_packet';

참고:
- https://dev.mysql.com/doc/refman/8.0/en/comparison-operators.html#operator_in
- https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_max_allowed_packet
- https://dev.mysql.com/doc/refman/8.0/en/show-variables.html