inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Real MySQL 시즌 1 - Part 1

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

해결된 질문

430

QWER

작성한 질문수 5

1

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

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

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

mysql dbms/rdbms backend query-tuning mysql-query

답변 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