인프런 커뮤니티 질문&답변

QWER님의 프로필 이미지
QWER

작성한 질문수

Real MySQL 시즌 1 - Part 1

1강 CHAR vs VARCHAR 궁금한 부분이 있습니다.

해결된 질문

작성

·

297

1

안녕하세요. 우선 좋은 강의 감사드립니다.

1강에서 UTF8MB4 셋을 사용하면서 CHAR(10) 을 선언했을 때 기본적으로 할당되는 크기에 대해서 궁금한 부분이 있는데요.

UTF8MB4 의 경우 글자당 최대 4 바이트 까지니까, CHAR(10) 이 최초에 10글자 만큼의 공간을 할당받는다고 하면 최대 40바이트가 할당되는 것이 아닌가요??
예를 들어 '안녕' 이라는 문자열을 저장한다고 하면 안 (4바이트) 녕(4바이트) 에 문자열 길이를 저장하는 부분 까지 한다고 해도 낭비되는 공간이 있다고 생각했는데, 저장되는 기준이 궁금합니다.

답변 1

1

이성욱님의 프로필 이미지
이성욱
지식공유자

우선, 강의 신청해주셔서 감사드립니다.

UTF8MB4 의 경우 글자당 최대 4 바이트 까지니까, CHAR(10) 이 최초에 10글자 만큼의 공간을 할당받는다고 하면 최대 40바이트가 할당되는 것이 아닌가요??

강의 내용에서도 말씀드렸듯이, 가변길이 문자셋을 사용하는 경우 바이트수로 길이가 결정된다고 설명드렸는데요. UTF8MB4 문자 셋을 사용하는 CHAR(10) 타입은,

  • 저장된 값의 길이가 10 바이트 미만이면 최대 10 바이트까지 할당하고,

  • 저장된 값의 길이가 10 바이트를 초과하면 VARCHAR 처럼 필요한만큼의 바이트만 할당하게 됩니다.

그래서 질문주신 "안녕"의 경우, "안녕" 자체는 6바이트(3바이트*2)를 사용하게 되므로, 문자열 6바이트 + 공백 4바이트를 가진 10 바이트 공간이 할당됩니다. (최대 4바이트이므로 4*10 만큼 할당 아님 => 동영상 강의를 다시 한번 체크해보시면 이해가 더 쉬울 듯 합니다.)

 

그래서, UTF8MB4 CHAR(10) 타입의 경우, "안녕"을 저장하면 4바이트만큼의 공간 낭비만 생기게 되는거죠.

 

QWER님의 프로필 이미지
QWER

작성한 질문수

질문하기