char와 varchar 타입의 차이점.
char와 varchar의 차이는 저장 방식의 차이에서 옵니다. 예를 들어 char(10)에 'ABC'를 기록한다고 한다면, 실제 데이터는 알파벳 3문자 이므로 3바이트의 크기이지만 char(10), 즉 고정길이 문자열 10자리로 선언했기 때문에 10 바이트의 크기를 가지고 기록되게 됩니다. 좀더 크게 볼까요? 'ABC' 3바이트 길이의 문자를 char(100)에 기록하게 되면 빈 97바이트를 포함하여 100바이트를 차지하게 됩니다. 괜히 저장 공간의 낭비를 가져오죠?
하지만 varchar(100)에 'ABC' 3바이트의 문자를 기록한다면 3바이트의 길이만 사용하게 되고 97 바이트는 사용되지 않습니다. 더 예를 든다면 varchar(100)에 'A' 를 기록하면 1바이트만 사용되고, 'ABCDE'를 기록하면 5바이트를 사용하게 됩니다. 즉, 실제 데이터 길이만 사용하게 됩니다. 선언된 전체길이를 사용해서 이보다 짧은 길이의 데이터를 기록하는 경우 공간의 낭비를 가져오는 char에 비하면 varchar는 저장 공간을 효율적으로 사용한다고 할 수 있습니다.
이런 이유로 기록되는 데이터의 길이가 일정한(예를 들면 사원번호, 주민등록번호, 우편번호 등) 데이터에는 char 를 사용하고, 길이가 일정하지 않은(예를 들면 주소, 메모 등) 데이터에는 varchar 타입을 사용하게 됩니다.
하지만 항상 varchar가 char 보다 좋다고 이야기 할 수 는 없습니다. 예를 들어 varchar(100)으로 선언했는데도 이보다 작은 사이즈의 데이터 'ABC'가 들어오면 3바이트의 공간만 차지한다는 것은 "실제 길이는 100이지만 현재의 데이터 사이즈가 3이니까 3바이트 길이만 사용하자" 라는 식의 다른 정보를 기록하기위해 별도의 작업이 내부적으로 수행되어 지게 됩니다. 또한 varchar(100)에 'ABC'가 들어와서 3바이트의 공간만 할당했는데, 이 데이터가 'ABCDEFG'로 늘어나게 되면 더 늘어난 데이터를 3바이트의 공간에 저장 할 수 없기 때문에 다른 공간으로 이동하여 기록을 하고, 어느 공간으로 이동하여 기록되었는지의 위치 정보만 원래 3바이트가 기록된 자리에 가지고 있게 됩니다. 이런 식의 약간의 내부적인 오버헤드가 발생하는게 varchar의 특징입니다.
출처 : http://oriented.tistory.com/entry/char-varchar
'Computer > Database' 카테고리의 다른 글
디비간 연결 (0) | 2012.11.05 |
---|---|
트랜잭션 로그 백업(Transaction Log Backup)에 관하여 (0) | 2012.03.20 |
MSSQL2008에서 트랜잭션 로그 자르기 (0) | 2012.03.20 |
데이터베이스 기본 이론 (0) | 2012.03.20 |
MS-SQL Stored Procedure (0) | 2011.06.28 |