MySQL 4.1 이후 버전부터는 CHAR(n), VARCHAR(n)에서 n은 바이트가 아니라 글자 수를 의미한다 또한 4글자 이하의 VARCHAR는 CHAR로 자동으로 변환된다.
CHAR는 길이가 고정된 문자열 타입이다. 최대 길이 255
지정된 크기만큼 데이터가 들어오지 않는 경우 남은 공간을 공백(trailing space)으로 채워 넣는다.
예를 들어서 CHAR(5)로 정의된 컬럼에 'ab'라는 2자리 문자열을 넣게 되면 남은 3자리는 'ab ' 다음과 같이 공백으로 채워진다, 결국 데이터의 크기는 항상 처음 선언된 5 바이트가 소요되고 데이터의 낭비가 발생한다.
VARCHAR는 가변의 문자열 타입이다. 최대 길이 65,535
Variable Character Field라는 이름의 의미처럼 가변의 길이를 가진 문자열 타입이다. 데이터를 삽입할 때 데이터 값 외에 삽입된 문자열의 길이를 함께 저장하는데, 255 글자 이하에는 1 바이트, 255 글자가 넘는 문자열의 경우 2 바이트의 추가 공간을 필요로 한다 (실질적인 데이터와 데이터에 대한 길이도 함께 저장되는 구조다).
예를 들어서 VARCHAR(10)에 'varchar'라는 문자열을 삽입하면 데이터에 대한 크기인 7 바이트에 데이터의 길이를 저장하기 위한 1 바이트를 더해져서 총 8 바이트가 소모된다.
VARCHAR는 CHAR 타입과 비교했을 때, 데이터의 길이를 확인하는 연산을 추가로 거쳐야 하기 때문에 아주 미세한 속도 차이가 발생할 수 있으나, 이 정도의 차이로 인한 성능 저하는 거의 느낄 수 없는 정도라고 한다, 또한 VARCHAR의 경우 데이터를 수정할 때, 기존보다 큰 데이터를 저장하게 되면 새로운 저장 영역에 할당해야 하기 때문에 데이터 파편화가 발생할 수 있다고 한다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL] count 함수는 null을 포함할까? (0) | 2024.08.07 |
---|---|
[SQL] foreign key(외래키) 추가, 삭제, 확인 방법 (1) | 2024.08.07 |
[SQL] 인덱스 힌트 / 옵티마이저 힌트 사용 방법 (주석, 튜닝) (0) | 2024.08.06 |
[SQL] 정규화(Normalization)와 반정규화(De-Normalization) (0) | 2024.07.31 |
[SQL] GROUP BY 절 사용법 (그룹별 집계) (0) | 2024.07.29 |