inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Real MySQL 시즌 1 - Part 1

Ep.01 CHAR vs VARCHAR

CHAR VARCHAR 질문입니다!

해결된 질문

508

dlkfjan

작성한 질문수 7

4

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

CHAR vs VARCHAR를 수강하던 중 궁금한 점이 생겨 질문 남깁니다!


1. CHAR의 경우 미리 공간을 할당해두기 때문에 update 시 파편화되는 부분이 없지만,
VARHAR의 경우 길이가 더 길게 update 시 처음 레코드가 저장되었던 공간은 delete marking 후에 새롭게 빈 공간에 레코드를 저장하는 것으로 이해했습니다.
그렇다면 VARCHAR에서 길이가 더 짧거나 길이가 같게 update를 하는 경우는 어떻게 동작하는걸까요?

 

  1. UTF8MB4 CHAR 경우 미리 할당된 데이터 보다 더 큰 데이터를 업데이트 하게 된다면 VARCHAR 처럼 처음 레코드가 저장되었던 공간은 delete marking후 새롭게 빈 공간에 레코드를 저장하게 되는걸까요? 예시 : CHAR(10)에 '한글'을 저장했다가, '한글 연습'을 업데이트 하는 경우 VARCHAR 처럼 동작하는지가 궁금합니다.

     

     

mysql dbms/rdbms backend query-tuning mysql-query

답변 1

3

이성욱

안녕하세요.

 

1번 : 레코드의 길이가 부족하지 않기 때문에, 다른 위치로 옮겨지지 않고 그 자리에 업데이트됩니다.

2번 : CHAR 타입의 길이가 얼마냐에 따라서 다릅니다. 동영상 강의 내용의 예제에서 언급했던 CHAR(10) 타입의 경우, "한글"을 저장하면 6바이트를 사용하고 4바이트는 비워두지만, "한글연습"으로 업데이트되면 12바이트가 필요해져서, 최종적으로는 다른 위치로 레코드가 옮겨지게 됩니다. 만약 "한글"에서 "한글날"로 업데이트되면 9바이트만 필요하기 때문에 위치가 옮겨지지 않고 그 자리에 그대로 업데이트될 수 있을 것으로 보여요.

 

감사합니다.

1

dlkfjan

감사합니다!

0

시바견

안녕하세요 2번 답변에 추가적으로 질문이 있어 답변드립니다.

UTF8MB4 문자형식을 사용한다면, CHAR 타입임에도 불고하고, 다른 레코드로 옮기지는 현상이 종종 일어날 수 있다고 이해하였습니다.

UTF8MB4 문자형식을 사용한다면, CHAR 타입 형식을 사용하는것은 CHAR 사용시의 장점이 조금 줄어든다고 생각되었습니다.

일반적으로 UTF8MB4문자 형식 사용시에는 VARCHAR만을 사용할까요? 혹은 종종 레코드 옮김 현상이 있음에도 불구하고 CHAR타입을 사용하는게 맞을지 질문드립니다.

1

이성욱

시바견님, 안녕하세요.

 

일반적으로 UTF8MB4문자 형식 사용시에는 VARCHAR만을 사용할까요? 혹은 종종 레코드 옮김 현상이 있음에도 불구하고 CHAR타입을 사용하는게 맞을지 질문드립니다.

UTF8MB4 문자 셋의 CHAR 타입을 사용하더라도, 영문 숫자만 저장하는 경우에는 고정 길이 문자열을 사용할 때와 같이 CHAR 타입의 장점을 100% 가지게 됩니다. 그리고 그렇지 않다 하더라도, 공간 낭비가 심하지 않다면 CHAR 타입을 사용하는 것이 좋아 보입니다. CHAR 타입은 (공간낭비를 배제하면) 최악의 경우 VARCHAR와 같은 방식으로 작동하는 것이기 때문에요.

 

감사합니다.

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