데이터베이스 - CHAR와 VARCHAR의 차이
- 데이터 베이스에서
CHAR
와 VARCHAR
는 둘 다 문자열을 저장하는 데 사용되는 데이터 타입이지만 저장 방식
과 용도
에서 차이가 있음
CHAR
- CHAR는 고정 길이 문자열을 저장하는 데이터 타입
- 지정된 길이만큼의 고정된 공간을 할다하여 데이터를 저장
- 데이터 길이가 지정된 길이보다 짧으면 나머지 공간은 공백으로 채워짐
- 고정된 길이의 문자열을 자주 사용하는 경우 적합
- 예시 : CHAR(10) 타입의 필드는 항상 10바이트를 차지함
- 'Hello'라는 문자열을 저장하면
Hello.
(공백 5개)로 저장
VARCHAR
- VARCHAR는 가변 길이 문자열을 저장하는 데이터 타입
- 실제 데이터 길이만큼의 공간을 할당하여 데이터를 저장
- 길이는 가변적이며 저장된 데이터의 길이에 따라 다름
- 길이가 가변적인 문자열을 자주 사용하는 경우 적합
- 예시 : VARCHAR(10) 타입의 필드는 'Hello'라는 문자열을 저장하면 5바이트만 차지
- 추가로 1-2 바이트가 길이정보를 저장하는 데 사용
특징 | CHAR | VARCHAR |
---|
저장 방식 | 고정 길이, 공백 패딩 | 가변 길이, 실제 데이터 길이 |
용도 | 고정 길이 문자열 | 가변 길이 문자열 |
저장 공간 | 고정된 공간 할당 | 가변적인 공간 할당 |
속도 | 빠른 접근 속도 | 길이에 따라 접근 속도 변동 |
예시 | CHAR(10) | VARCHAR(10) |
MySQL에서 VARCHAR 최대 길이 설정 시 주의할 점
- MySQL의 행의 최대 크기는 65,535바이트
- MySQL 테이블의 각 행(Row)은 최대 65,535 바이트까지 저장할 수 있음, 이는 테이블의 모든 칼럼의 데이터를 합친 크기
- 따라서, VARCHAR 칼럼의 길이를 설정할 때는 다른 칼럼들과 함께 고려해야 함
- MySQL이 사용하는 문자인코딩 방식은 5.5.3 버전부터 UTF8을 지원하는
utf8mb4
- utf8mb4는 이모지와 같은 4바이트 문자를 포함하여 한글과 같은 3바이트 문자도 커버함
- 각 문자의 크기는 다음과 같음
- 기본 ASCII 문자 : 1 바이트
- 유럽어 및 일부 확장 문자 : 2 바이트
- 한글, 일본어, 중국어 등 다국어 문자 : 3 바이트
- 이모지 및 기타 확장 문자 : 4 바이트
- 괄호 안에 들어가는 숫자는 바이트가 아니라 길이 제한
- VARCHAR(n)에서 n은 바이트 수가 아니라 문자열의 최대 길이를 의미
- 이는 저장될 수 있는 최대 문자 수를 나타냄
- 실제 저장되는 바이트 수는 사용된 문자의 인코딩에 따라 다름
- 예를 들어, VARCHAR(255)는 최대 255개의 문자를 저장할 수 있음, 하지만 각 문자의 바이트 수에 따라 실제로 필요한 저장 공간은 다를 수 있음