1강 CHAR vs VARCHAR 궁금한 부분이 있습니다.
안녕하세요. 우선 좋은 강의 감사드립니다.
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바이트만큼의 공간 낭비만 생기게 되는거죠.
Commit 응답받기 전 네트워크 문제가 발생하면
1
64
1
14분44초에 쿼리 질문드립니다.
0
73
2
ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문
0
75
2
ep.12 count(*) 질문
0
67
2
레코드 수정시 저장공간이 부족하면
0
81
2
복합 index 문의
0
87
2
강의
0
82
1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
0
107
2
GAP 락에 대한 질문 드립니닷..!
0
195
1
ORDER BY가 필요한 이유
0
177
2
[오타 제보] 선행 데이터를 기반으로 한 데이터 분석
0
167
1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
0
449
2
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
0
319
2
MySQL Where절 내 조건의 순서
0
395
2
1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?
0
238
2
Mysql table avg_row_length
0
144
1
12강 FULL GROUP BY
0
135
2
ep11) Prepared Statement에서 질문
0
145
2
7)select for update 강의에서 질문
0
230
2
12강. LEFT JOIN 사용 방법 준수 5:42
0
240
2
6강. Top N 데이터 조회와 관련해 질문있습니다.
0
196
2
5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.
0
145
1
deternmistic 질문
0
174
2
1강 CHAR타입에 대해 질문드립니다
0
230
1





