본문 바로가기

개발/DB

[mssql] 문자 데이터 형식 char, varchar, nchar, nvarchar 차이점

반응형

CHAR[(N)] 고정길이 문자형

NCHAR[(N)] 글자 0~4000자. 유니코드 고정 길이 문자형 

VARCHAR[(N | MAX)] 가변 길이 문자형. N을 사용하면 1~8000까지 크기를 지정 가능, MAX로 지정하면 최대 2GB크기를 지정 가능 

NVARCHAR[(N | MAX)] 유니코드 가변 길이 문자형. N을 사용하면 1~4000까지 크기를 지정 가능, MAX를 지정하면 최대 2GB크기를 지정 가능

BINARY[(N)] 고정길이의 이진 데이터 값

VARBINARY[(N | MAX)] 가변길의이 이진 데이터 값. N을 사용하면 1~8000까지 크기를 지정 가능,  MAX로 지정하면 최대 2GB크기를 지정 가능. 이미지/동영상 등을 저장하기 위해 사용된다. 


 

CHAR 형식은 고정길이 문자형으로 자릿수가 고정되어 있다. 

CHAR(100)에 'ABC' 3비트만 저장해도 100바이트를 모두 확보한 후에 앞에 3바이트를 사용하고 뒤의 97바이트는 낭비하게 되는 결과가 나온다.

VARCHAR 형식은 가변길이 문자형이다.

VARCHAR(100)에 'ABC' 3비트를 저장할 경우에 3바이트만 사용한다. 

그래서 공간을 효율적으로 운영할 수 있다.

하지만, 대용량 데이터베이스를 사용할 때는 4글자 미만을 저장하게 될 경우는 CHAR 형식으로 설정하는 것이 INSERT/UPDATE 시에 더 좋은 성능을 발휘한다.

 

한글(유니코드)을 저장하기 위해서 CHAR나 VARCHAR 형식으로 정의할 경우에는 2배의 자릿수를 준비해야 한다. 

즉, 최대 3글자의 한글을 저장하고 자 한다면 CHAR(6) , VARCHAR(6)로 데이터를 지정해야 한다.

한글은 2바이트의 자리를 차지하기 때문이다. 

이러한 문제를 간단히 하려면 NCAHR 나 , NVARCHAR 형식을 사용하면 된다. (따라서 NCAHR의 열의 크기는 CHAR의 절반인 4000자이다)

NCAHR(3)으로 지정하면 한글 뿐만 아니라 모든 언어를 무조건 3글자 저장할 수 있어서 더 단순하고 명확하게 문자 데이터를 입력 할 수 있다.

하지만 한글(유니코드)을 저장하지 않고 영어만 저장할 것이 확실 하다면 NCAHR/NVARCHAR 보다, CHAR/NVARCHAR가 공간을 적게 차지해서 성능향상에 도움이 된다. 특히 대용량 데이터베이스에서는 더욱 그렇다.

유니코드는 문자에만 관련된 얘기이며, 숫자/날짜 등에서는 전혀 신경 쓸 필요가 없다. 따라서 특수문자등이 사용될때는 VARCHAR 를 사용하면 된다.

 

 

 

이것이 SQL SERVER다 스터디하면서 정리 ! 

 

 

반응형