hmk run dev
char대신 varchar를 사용하는 이유 본문
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를 썼을때 관리해야하는 관리의 복잡도를 확연하게 줄여줄 수 있다.
참고
'mysql' 카테고리의 다른 글
인터페이스에서 QUERY 작성하기 (0) | 2021.11.19 |
---|---|
PL/SQL 함수 (0) | 2021.11.18 |
MYSQL CHARSET(캐릭터 셋) (0) | 2021.11.17 |
MYSQL database type 정리 (0) | 2021.11.17 |
PL/SQL 계층형 쿼리 카테고리 카테고리명 가져오기 (0) | 2021.11.15 |