티스토리 뷰
728x90
‘ABCD’를 INSERT 할 경우
CHAR
CHAR : 저장공간의 크기가 고정적이다.
CHAR(10) 컬럼에 ‘ABCD’를 insert 할 경우, 6바이트가 남아있다.
VARCHAR
VARCHAR : 저장되는 값에 따라 저장공간이 변한다. 해당 값의 길이를 별도로 저장할 1~2바이트를 추가로 필요로 한다.
VARCHAR(10) 컬럼에 ‘ABCD’를 insert 할 경우, 길이를 나타내는 숫자 4를 위한 1바이트와, ‘ABCD’를 저장하기 위한 4바이트, 총 5바이트의 저장공간이 생긴다.
‘ABCD’→’ABCDE’로 UPDATE 할 경우
- CHAR(10) : 이미 10바이트가 준비되어 있으므로 그냥 변경되는 컬럼의 값을 업데이트
- VARCHAR(10) : 현재 4바이트밖에 저장할 수 없는 구조이므로 더 큰 값으로 변경하기 위해서는 레코드 자체를 다른 공간으로 옮겨서 (Row migration) 저장해야 한다.
- 레코드 이동이나 분리는 공간낭비나 자원 낭비를 야기한다.
💡 CHAR(10), VARCHAR(10)에서 괄호 안의 숫자는 바이트가 아니라 문자의 수를 의미한다.
- 영어를 포함한 1바이트 문자 사용 시 : 10바이트 사용
- 한국어 일본어 같은 2바이트 문자 사용 시 : 20바이트 사용
- UTF-8 등의 최대 4바이트까지 쓰는 문자 사용 시 : 40바이트까지 사용 가능
언제 뭘 쓰는 게 좋을까?
CHAR
- 주민등록번호처럼 항상 값의 길이가 고정적일 경우
- 값이 2~3바이트씩 차이가 나더라도 자주 변경될 수 있는 부서 번호나 게시물의 상태 값 등
VARCHAR
- 입력할 값의 길이가 고정적이지 않은 경우
- 한번 입력하면 변경될 일이 적은 경우
728x90
'Database' 카테고리의 다른 글
[인덱스] B-Tree vs Hash, InnoDB vs MyISAM (0) | 2022.11.06 |
---|---|
[MySQL] 정합성과 잠금, 트랜잭션, 격리 수준 간단 정리 (0) | 2022.09.26 |
[MySQL] Character Set & Collation (0) | 2022.09.06 |
대규모 데이터를 다루기 위한 기초지식 - 국소성, 파티셔닝 (0) | 2022.08.19 |
[책] 업무에 바로 쓰는 SQL튜닝 (0) | 2022.01.31 |
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MySQL
- kubernetes
- database
- laravel 테스트코드
- 스프링
- laravel
- Container
- JUnit
- index
- mockery
- 카프카
- 샤딩
- k8s
- php
- phpUnit
- kafka
- NoSQL
- 몽고디비
- Spring
- 쿠버네티스
- devops
- Infra
- java
- mongoDB
- 분산처리
- docker
- springboot
- 라라벨
- 대규모 데이터 처리
- AOP
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함