항해중인 개발자

char대신 varchar를 사용하는 이유 본문

mysql

char대신 varchar를 사용하는 이유

바다를바라보다 2021. 11. 17. 16:42

char사용을 지양하고 varchar를 이용하라는 이야기를 들었다.

 

고정길이로 설정해도 괜찮을 것 까지 모두 varchar로 설정하라는데 

의구심이 들어 char와 varchar의 차이점에 대해 좀 더 심도 있게 알아보고자 한다.

 

CHAR 

 

고정길이 문자열 타입으로 만약 타입의 크기만큼의 데이터가 들어오지 않은경우 이후의 공간을 스페이스로 채워넣습니다. 고정길이 문자열이기 때문에 헤더에는 레코드의 길이에 대한 정보가 들어있지 않습니다.

.

VARCHAR

가변길이 문자열 타입으로 타입의 크기만큼의 데이터가 들어오지 않더라도 이후의 공간을 스페이스로 채워넣지 않습니다. 가변길이 문자열이기 때문에 헤더에는 레코드의 길이에 대한 정보가 포함되어야 합니다.


CHAR(5) & VARCHAR(5) 데이터가 들어오는 경우

 

 

실제 쿼리로  CHAR와 VARCHAR를 비교해보자

CREATE TABLE TEST (C1 CHAR(5), C2 VARCHAR(5));

INSERT INTO TEST VALUES ('ABC', 'ABC');​

SELECT C1 ( 공백을 주어도 조회가능 )

SELECT * FROM TEST WHERE C1 = 'ABC';

C1    C2 
----- ---
ABC   ABC

1 row selected.

SELECT * FROM TEST WHERE C1 = 'ABC ';

C1    C2 
----- ---
ABC   ABC

 

SELECT C2 ( 공백이 포함되면 조회 불가 )

SELECT * FROM TEST WHERE C2 = 'ABC';

C1    C2 
----- ---
ABC   ABC

1 row selected.

SELECT * FROM TEST WHERE C2 = 'ABC ';

no rows selected.

 

C1(CHAR) 컬럼의 빈공간은 공백으로 채워지는 반면 C2(VARCHAR) 컬럼은 'ABC'만 저장 하기 때문!

 

 

 

CHAR 사용을 지양하는 이유

VARCHAR 는 CHAR 타입에 대비해서 레코드의 길이가 몇이다 라는 연산을 거쳐야 합니다.

당연히 속도상에서 아주아주 미세하게 이점이 있을 수 있습니다.

그러나 이 이점은 정말 지나칠 정도의 민감함이며, VARCHAR 를 사용하여 성능저하가 느껴진다 라고 느낄일은 없다고 생각됩니다.

그 밖의 이유

데이터 크기 때문에 에러나도 났다간 프로젝트 운영 자체가 사라지는 경우도 있기 때문에.. 운영중 에러 및 성능 향상 못느낌으로 인해 확장성 좋고 운영하기 좋은 타입으로 쓴다.

CHAR컬럼의 데이터를 equals 로 비교했는데 값이 다른걸 몰라서 고생하거나, trim() 을 추가로 써줘야 해서 낭비가 더 늘어나는 경우



결론

 CHAR를 썼을때 미~세한 기능상 이점이 있을진 모르지만
 VARCHAR를 표준으로 정하면 CHAR를 썼을때 관리해야하는 관리의 복잡도를 확연하게 줄여줄 수 있다.

 

 

참고 

https://mozi.tistory.com/229

 

[DBA] 데이터타입 CHAR 와 VARCHAR 중 어느것을 써야할까?

CHAR 와 VARCHAR CHAR 고정길이 문자열 타입으로 만약 타입의 크기만큼의 데이터가 들어오지 않은경우 이후의 공간을 스페이스로 채워넣습니다. 고정길이 문자열이기 때문에 헤더에는 레코드의 길

mozi.tistory.com

 

0 Comments
댓글쓰기 폼