티스토리 뷰

Database

[MySQL] CHAR & VARCHAR

집사킴 2022. 9. 8. 10:09
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
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
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
글 보관함