텍스트 데이터를 저장하는 데 사용되는 문자열 데이터 타입
둘 다 문자 데이터를 저장하지만, 저장 방식과 성능 특성이 다르다
1. CHAR
1.1. 정의
- 고정 길이(Fixed-length) 문자열 데이터 타입
- 저장하려는 데이터의 길이가 지정한 길이보다 짧더라도 빈 공간을 공백 문자로 채움
1.2. 특징
- 고정된 크기 :
- 데이터가 길이보다 짧으면 남은 공간을 공백으로 채워 저장
- 예를 들어, CHAR(10)에 "cat"을 저장하면, 실제로는 "cat "로 저장됨
- 빠른 속도 :
- 고정된 길이 때문에 읽기와 쓰기 성능이 빠름
- 데이터를 처리할 때, 문자열 길이를 계산하지 않아도 됨
- 메모리 낭비 :
- 데이터 길이가 자주 달라지는 경우, 빈 공간을 채우기 때문에 저장 공간이 낭비됨
1.3. 예제
CREATE TABLE example_char (
id INT,
code CHAR(5)
);
INSERT INTO example_char (id, code) VALUES (1, 'ABC');
-- 'ABC '로 저장됨 (뒤에 공백 추가)
SELECT LENGTH(code) FROM example_char WHERE id = 1;
-- 결과: 5 (공백 포함)
2. VARCHAR
2.1. 정의
- 가변 길이(Variable-length) 문자열 데이터 타입
- 데이터의 실제 길이에 따라 저장하며, 길이 제한만 설정
2.2. 특징
- 가변된 크기 :
- 데이터의 실제 길이만 저장하며, 필요하지 않은 공간을 낭비하지 않음
- 예를 들어, VARCHAR(10)에 "cat"을 저장하면 "cat"만 저장되고 나머지 공간은 사용되지 않음
- 저장 공간 효율적 :
- 데이터 길이가 고정되지 않아, 데이터베이스가 실제 데이터 길이를 별도로 관리
- 저장 공간이 최적화됨
- 속도 약간 느림 :
- 길이를 별도로 저장하고 계산해야 하기 때문에, CHAR에 비해 속도가 약간 느림
2.3. 예제
CREATE TABLE example_varchar (
id INT,
description VARCHAR(10)
);
INSERT INTO example_varchar (id, description) VALUES (1, 'cat');
-- 'cat'만 저장됨
SELECT LENGTH(description) FROM example_varchar WHERE id = 1;
-- 결과: 3 (공백 없음)
3. CHAR vs VARCHAR 비교
특성 | CHAR | VARCHAR |
길이 | 고정 길이 (빈 공간을 공백으로 채움) | 가변 길이 (데이터 길이에 따라 저장) |
속도 | 더 빠름 (고정된 길이로 작업) | 느림 (길이 계산 필요) |
저장 공간 효율성 | 공간 낭비 가능 | 저장 공간을 효율적으로 사용 |
사용 사례 | 고정된 길이의 데이터 (우편번호, 코드 등) | 길이가 다양한 데이터 (설명, 이름 등) |
최대 길이 | 데이터베이스에 따라 다름 (일반적으로 255자) | 데이터베이스에 따라 다름 (최대 65,535자) |
4. 사용 시 고려 사항
4.1. CHAR을 사용하는 경우
- 고정된 길이의 데이터를 저장해야 할 때 :
- 예: 우편번호(Zip Code), 국가 코드(Country Code), 전화 지역 코드
- 데이터 길이가 동일하여 일관된 성능과 공간 활용이 중요한 경우
4.2. VARCHAR을 사용하는 경우
데이터 길이가 다양하고, 공간 효율성이 중요한 경우
- 예 : 사용자 이름, 설명, 이메일 주소
- 공간 낭비를 피하면서 유연하게 데이터를 저장하고 관리해야 할 때
5. 데이터베이스 엔진별 동작 차이
- MySQL :
- `VARCHAR`는 최대 65,535자까지 저장 가능
- `CHAR`은 고정 길이로 저장되며, 데이터베이스 성능 최적화에 사용
- PostgreSQL :
- `VARCHAR`와 TEXT의 차이가 크지 않음
- `CHAR`은 가변 길이로 작동하지만 공백을 채움
- Oracle :
- `VARCHAR` 대신 `VARCHAR2` 사용 (추가 기능 지원)
6. 추가로 알아야 할 점
6.1. 길이 제한
- `CHAR(n)`과 `VARCHAR(n)`의 `n`은 최대 길이를 의미한다
- 예 : `VARCHAR(10)`은 최대 10자의 문자열만 저장 가능. 초과 시 에러 발생
6.2. CHAR의 공백 제거
- `CHAR` 타입의 공백은 일반적으로 쿼리에서 자동으로 제거된다
SELECT 'ABC' = 'ABC ';
-- 결과: TRUE (CHAR 타입의 공백 무시)
6.3. VARCHAR의 길이 초과 처리
- `VARCHAR`에 데이터가 최대 길이를 초과하면 에러가 발생한다
INSERT INTO example_varchar (description) VALUES ('ThisIsTooLong');
-- 오류: 데이터가 최대 길이(10)를 초과했습니다.
정리
- `CHAR`은 고정된 길이를 유지하며 빠르고 일관성 있는 성능을 제공한다. 고정 크기의 데이터를 저장할 때 적합
- `VARCHAR`은 가변 길이를 지원하며 저장 공간을 효율적으로 사용한다. 길이가 가변적인 데이터를 저장할 때 적합
출처 : ChatGPT
'DB > MySQL' 카테고리의 다른 글
MySQL 리플리케이션 (0) | 2025.04.05 |
---|---|
[SQL] SQL Dialects (SQL 방언) (0) | 2025.02.21 |
[SQL] 트랜잭션 (0) | 2024.12.17 |
[SQL] 연산자 (0) | 2024.12.10 |
[SQL] sql 명령어 (0) | 2024.12.03 |