나는 위에처럼 char는 고정형이고 남는 공간을 공백으로 채우고

varchar는 가변적이고 공백을 안남기는데

당연히 varchar쓰지 왜 메모리 낭비하는 char를 쓸까에 대한 의문이 있었다

그런데 알고보니 적절히 쓰면 오히려 char가 메모리 공간을 절약할 수 있다는걸 알았다

당연히 그러니까 두개 다 쓰겠지.. 

 

고정형이고 공백으로 채우는 대신 글자수가 정해져있다면?

닉네임이나 아이디같이 길어봤자 10~20글자 내라면?

작은 데이터지만 2배나 되는게 네이버나 구글같이 규모가 큰 사이트의 데이터를 쌓게 된다면?

저 바이트 하나의 차이가 엄청난 데이터를 차지하게 될 것이다.

데이터를 최대한 활용해 관리에 들어가는 비용을 줄여가는것이 회사 입장에서 데이터 관리자의 필요성이니까

 

아래는 너무 비교를 잘해놓으신 분의 글이다

 

 

CHAR VARCHAR 차이점

 

CHAR는 말 그대로 고정형

ex) CHAR(8)로 선언 시 글자를 한 개를 넣든 두 개를 넣든 8바이트의 공간을 차지합니다.

VARCHAR는 반대로 가변형 문자열이기 때문에 데이터의 길이에 따라서 가변적으로 길이가 정해집니다.

ex) VARCHAR(8)로 선언 시 글자를 한 개를 넣으면 1바이트, 2개를 넣으면 2바이트의 공간을 유동적으로 차지합니다.

※ VARCHAR = variable + char

 

CHAR는 경우에 따라 데이터가 낭비될 수 있지만 추후 연산이 필요 없기 때문에 검색속도 및 읽히는 속도가 VARCHAR에 비해 빠르다는 장점이 있습니다. 글자 수가 고정되는 경우에 사용하면 데이터를 보다 효율적으로 관리할 수 있습니다.

ex) 주민등록번호, 전화번호, 사원번호 등

 

VARCHAR 입력받은 데이터의 크기가 작을 경우, 그 크기만큼만 메모리를 차지하므로 메모리 사용량을 줄일 수 있다는 장점이 있습니다.

 

또한 VARCHAR는 insert나 update가 있을 때 현재 자신이 차지하고 있는 영역이 얼마인지 확인하고, 부족한 경우 더 할당하고 남으면 줄여서 insert합니다. 하지만 CHAR는 고정된 길이의 값을 넣는 것이기 때문에 일단 밀어 넣고, 남는 부분을 공백으로 채우게 됩니다.

 

차이점만 있는 것은 아니고, 공통점도 있습니다.

 

 

CHAR VARCHAR 공통점

 

1. 문자열을 데이터 타입으로, 싱글쿼터(' ')로 값을 나타냅니다.

 

2. 대소문자를 구분합니다.

 

3. 한글은 한 글자당 3byte, 영문자는 알파벳 하나당 1byte의 크기를 가집니다.

 

4. 설정된 크기를 초과할 경우, 메모리를 초과한 나머지 값은 저장되지 않습니다.

ex) CHAR(20)으로 했을 경우 20byte만큼만 공간이 할당되기 때문에 20byte를 넘어가면 데이터가 잘리게 됩니다.

이러한 특성은 VARCHAR도 동일합니다.

※ mysql 5 버전부터는 괄호 안의 숫자가 byte가 아닌 글자 수를 의미합니다.

 

VARCHAR와 TEXT의 차이점

 

Index의 일부로 사용 가능 여부

 

  • VARCHAR : 가능
  • TEXT : 불가능

 

max size limit 가능 여부

 

  • VARCHAR : 있다, 1~65535
  • TEXT : 없다, only 65535

 

저장된 character 이외의 현재 저장된 String의 저장 공간

 

  • VARCHAR : x <= 255 then, 1byte, 256 <= x <= 65535 then, 2byte
  • TEXT : only 2byte

 

실제 사용에 있어서 ID, 이메일, 제목과 같은 간단한 정보(비교적 짧은 문자열)는 주로 VARCHAR를 이용하고, 댓글이나 신문기사와 같은 긴 문장 종류들은 TEXT를 이용한다고 합니다. 또한 데이터가 자주 검색되는 경우 VARCHAR로 저장하는 것이 더 빠르다고 합니다.

 

 

출처:https://cobook.tistory.com/m/60

+ Recent posts