[MSSQL] VARCHAR(MAX) / NVARCHAR(MAX) 에러시

2024. 11. 1. 14:45SQL

쿼리문을 @STR 변수에 담아서

마지막에 SELECT @STR을 했는데

@STR 문이 짤려서 나오며 에러가 나서 찾아봤다.

확인해보니 @STR문이 아예 중간에 짤려서 저장되어있었다.

 

원인 : 

VARCHAR는 2^31-1 byte

NVARCHAR는 2^30-1 byte까지 지원한다.

(VARCHAR와 NVARCHAR의 차이 : VARCHAR는 바이트 수, NVARCHAR는 글자 수 기준이다.

 VARCHAR는 영어, 숫자는 1byte, 그 외는 2byte 처리한다.

 NVARCHAR는 모든 문자를 일괄적으로 2byte 처리한다.)

저장범위는 넓지만 문제는

VARCHAR(MAX)는 기본적으로 8000 byte 문자열이라고 잡힌다고 한다.

MAX라고 썼지만 MAX가 아닌것임..

 

해결방안 : 

8000byte 가 넘는다면 넘어갈거라고 알려줘야한다.

 

@STR = CONVERT(VARCHAR(MAX), '') + '8000byte가 넘는 문자열'

이라고 알려주면 짤리지않는다.