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 공통점
- 문자열을 데이터 타입으로, 싱글쿼터(‘ ‘)로 값을 나타낸다.
- 대소문자 구분을 한다.
- 한글은 한 글자당 3byte, 영문자는 알파벳 하나당 1byte의 크기를 가진다.
- 설정된 크기를 초과할 경우, 메모리를 초과한 나머지 값은 저장되지 않는다.
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로 저장하는 것이 더 빠르다고 한다.