MSSQL에 문자열 타입이라는 데이터 타입이 있습니다. 문자열 타입은 이름, 직급, 주소와 같은 문자 또는 문장을 나타내기 위해 사용되는 타입입니다. 문자열엔 일반문자열과 유니코드 문자열, 고정문자열, 가변문자열이 있습니다. 이번 포스팅에서 일반 문자열, 유니코드 문자열, 가변 문자열을 설명하도록 하겠습니다.
일반 문자열과 유니코드 문자열
일반 문자열
일반 문자열엔 일반적으로 char, varchar, text 등이 있습니다. 일반 문자열을 저장하기 위한 데이터 타입은 0~9까지의 숫자와 A~Z까지의 알파벳, 키보드에서 입력할 수 있는 일반적인 기호 같은 ASCII문자가 저장됩니다. 표준 ASCII코드 1바이트는 한 개의 글자를 의미합니다. 한글의 경우 한 글자당 2바이트가 한 개의 글자를 표현하는 데 사용됩니다.
데이터입 char(100) 일 경우 100바이트를 저장할 수 있는데, 영어일 경우 100글자를 저장할 수 있는 반면, 한글의 경우 50글자를 저장할 수 있습니다.
- VARCHAR(n) : 일반 문자열인 데이터 타입입니다. VARCHAR(n) 형식으로 지정할 수 있으며 'n'은 저장할 문자열의 길이를 나타냅니다. 예를 들어 VARCHAR(20)은 영어일 경우 20글자 이하를 저장할 수 있으며, 한글일 경우 10글자 이하를 저장할 수 있습니다.
- TEXT : 대용량 문자열을 저장할 때 사용하는 데이터 타입입니다. 최대길이를 지정하지 않으며 2GB까지 저장할 수 있습니다.
- CHAR : CHAR(N) 형식으로 지정하며, 지정한 길이보다 짧은 문자열을 저장할 경우에도 남은 공간을 공백으로 채워 저장합니다. CHAR(10)으로 지정하였다면 "hello"라 데이터를 넣을 경우 남은 자리의 5자리는 공백으로 채워지게 됩니다.
유니코드 문자열
MSSQL에서 유니코드 문자열을 저장할 때 사용하는 데이터 타입은 NVARCHAR, NTEXT, NCHAR 세 가지가 있습니다. 유니코드인데 2바이트를 사용해서 전 세계 문자를 표현합니다. 예를 들어 NCHAR(100)이라 지정하면 내부적으로 200바이트의 저장 영역을 사용하고 영어나 한글 관계없이 100글자까지 저장할 수 있습니다.
- NCHAR(n) : 유니코드를 저장하기 위해 사용하는 데이터 타입입니다. NCHAR(n) 형식으로 지정하며, n은 저장할 문자열의 최대 길이(유니코드 문자 단위)를 나타냅니다.
- NVARCHAR(n) : NCHAR(n)와 같이 유니코드 문자열을 저장할 때 사용하는 데이터 타입입니다. 'NVARCHAR(n)' 형식으로 지정하며, n은 저장할 문자열의 최대 길이(유니코드 문자 단위)를 나타냅니다.
- NTEXT : 대용량의 유니코드 문자열을 저장할 때 사용하는 데이터 타입입니다. 최대 길이를 지정하지 않으며, 1GB까지 저장할 수 있습니다.
유니코드 문자열은 전 세계적의 모든 문자를 지원하므로, 다양한 언어의 데이터를 저장할 때 유용합니다. NCHAR와 NVARCHAR는 CHAR와 VARCHAR와 유사한 형식을 가지고 있으며, NTEXT는 TEXT와 유사한 형식을 가지고 있습니다.
주의할 점은 SQL Server 2005 버전부터 NTEXT 데이터 타입은 비권장되는 데이터 타입으로, 이후 버전부터는 NVARCHAR(MAX) 데이터타입으로 대체되었습니다. 따라서 SQL Server 2005 이후 버전에서 새로운 데이터베이스를 설계할 때는 NTEXT를 사용하려면 NVARCHAR(MAX)를 사용해야 합니다.
고정문자열(char, nchar)과 가변 문자열(varchar, nvarchar)
고정 문자열(char, nchar)
고정 문자열에는 char타입과 nchar타입이 있습니다. 고정문자열의 단점은 선언된 열의 저장공간이 남는다면 저장공간이 줄지 않고 그대로 공백으로 채워지기 때문에 메모리 효율성에선 떨어지는 단점이 있습니다. 예시로 char(10)으로 선언된 데이터 타입이 있습니다. 여기에 hello로 입력했다 들자면 아래와 같이 나올 겁니다.
h | e | l | l | o |
가변 문자열(varchar, nvarchar)
가변 문자열에는 varchar, nvarchar이 있습니다. 가변 문자열의 장점은 선언한 문자열의 크기가 남는다면 남은 공간은 없어지고 저장된다는 게 장점입니다. 주소, 이름 등 특정되지 않고 동일한 데이터가 들어가지 않을 땐 가변 문자열을 사용하기 좋으며 메모리 효율적으로도 좋습니다.
예시로는 varchar(10)가 선언되어 있습니다. 여기에 "hello"라는 문자열을 넣는다면
h | e | l | l | o |
hello 자리까지만 데이터가 남고 o 뒤의 데이터는 없어지게 됩니다.
댓글