inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Real MySQL 시즌 1 - Part 1

char vs varchar 타입에 궁금한 점이 있습니다.

해결된 질문

221

Jung Cheol

작성한 질문수 5

0

varchar 타입의 경우 데이터 업데이트시 파편화가 생길 수 있다는 점을 이해했습니다!

 

다만, char 타입을 쓰면 좋은 경우가 문자열의 길이가 가변성이 크지 않은 경우라고 한다면

varchar의 경우에도 길이 가변성이 크지 않은 탓에 처음부터 선언해둔 길이를 벗어나지 않을 가능성이 클 거 같다는 생각이 들었습니다.

 

만약 주민등록번호라고 한다면 13자리니까

char(13)로 하거나 varchar(13)해도 이 자리수를 넘어가지 않을 것이고

자주 업데이트 되는 경우라고 해도 char도 그렇고 varchar도 그렇고 길이수만 잘 잡아놓으면

fragmenation 문제가 없는 것이 아닌지 궁금합니다.

 

그럼에도 char를 쓰는 것이 더 좋은 이유가 있을지 궁금해서 질문남깁니다!

mysql dbms/rdbms backend query-tuning mysql-query

답변 2

0

이성욱

안녕하세요.

 

만약 주민등록번호라고 한다면 13자리니까

char(13)로 하거나 varchar(13)해도 이 자리수를 넘어가지 않을 것이고

자주 업데이트 되는 경우라고 해도 char도 그렇고 varchar도 그렇고 길이수만 잘 잡아놓으면

fragmenation 문제가 없는 것이 아닌지 궁금합니다.

이 질문에는 이미 동영상 강의 내용에 답변이 설명되어 있는데요.

주민번호는 길이가 가변이 아니라 고정인거죠. 모든 주민등록번호는 13자리니깐요.

이런 경우에는 CHAR나 VARCHAR 둘 모두 뭘 사용해도 Fragmentation 우려는 크지 않습니다.

그런데, 만약 길이가 가변적인 영문 이름을 저장한다고 가정했을 때,

이 영문 이름이 매우 빈번하게 업데이트되는 경우라면, 길이가 제각각이어서 VARCHAR 타입의 경우 Fragmentation이 발생할 가능성이 높은거죠.

감사합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

주민등록번호와 같이 고정된 길이를 가지며 자주 변경되지 않는 데이터는 char타입을 사용하는 것이 더 적합할 수 있습니다. char 타입은 고정된 공간을 차지하기 때문에, 데이터를 빠르게 읽는 데에 있어서 varchar에 비해 성능상 이점이 있을 수 있습니다. varchar는 저장된 데이터의 길이에 따라 필요한 공간이 달라지며, 길이 정보를 추가로 저장해야 하기 때문에 비교적 작은 공간이지만 추가적인 오버헤드가 발생합니다.

그렇다고 하더라도, varchar 타입의 경우 데이터의 길이가 가변적일 때 사용공간을 더 효율적으로 사용할 수 있는 장점이 있습니다. 주어진 공간을 초과하지 않을 것이 확실한 경우에도, varchar는 실제 저장되는 데이터의 길이에 따라 공간을 사용하기 때문에, 데이터가 추후에 변경되어 길이가 줄어드는 경우 낭비되는 공간을 줄일 수 있습니다.

데이터가 자주 업데이트되고, 업데이트되는 데이터의 길이가 변경될 가능성이 있는 경우에는 varchar를 사용하면 파편화 문제가 발생할 수 있습니다. 하지만 고정된 길이의 데이터를 다루면서, 업데이트의 빈도나 데이터의 길이 변화 가능성이 낮은 경우에는 char를 사용하면 더 효율적일 수 있습니다.

결국 선택은 저장될 데이터의 특성과 애플리케이션의 요구사항에 따라 달라질 수 있으며, 각 타입의 특성을 이해하고 상황에 맞게 최적의 선택을 하는 것이 중요합니다.

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

448

2

LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이

0

319

2

MySQL Where절 내 조건의 순서

0

394

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

229

2

12강. LEFT JOIN 사용 방법 준수 5:42

0

240

2

6강. Top N 데이터 조회와 관련해 질문있습니다.

0

195

2

5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.

0

145

1

deternmistic 질문

0

174

2

1강 CHAR타입에 대해 질문드립니다

0

230

1