해결된 질문
작성
·
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바이트만큼의 공간 낭비만 생기게 되는거죠.