#title Char vs Varchar [[TableOfContents]] 데이터형에 대해서는 이미 언급한적이 있다. 데이터형은 입/출력의 양을 정하는 기본적인 제약이기도 하다. 또한 언급한적은 없지만 데이터형이 검색과 삽입, 갱신연산에 주는 영향은 매우 크다. 특히 잘못된 데이터형의 사용으로 인덱스를 사용하지 못하는 경우가 있다. 도움말에 보면 char형보다는 varchar형을 더 권장하고 있다. varchar형이 사용하기 편리하다보니 너무나도 남발하는 경향을 보이기도 한다. 실제로 실무에서 쓰이고 있는 데이터베이스의 테이블에서 30개가 넘는 컬럼을 가진 테이블이모두 varchar형으로 되어 있는 것을 본적이 있다. 확인을 해보니 무조건 권장사항이라고 하여 varchar형으로 선언한 뒤 사용하고 있었다. varchar(10)으로 결정하고 6바이트만을 사용하였다면 당연히 가변길이컬럼이므로 6바이트만 저장될 것이다. char(10)형은 6바이트를 채우고 나머지는 공백으로 채우게 된다. attachment:varchar01.jpg SQL Server의 varchar의 최대크기는 8000byte이다. 그러므로 위의 그림과 같이 varchar형 컬럼의 글자수를 모두 저장하려면 2바이트가 필요하다. 그래서 varchar에는 2바이트의 오버헤드가 있다. 또한 char형에 비해서 연산도 복잡하여 cpu의 오버헤드도 있다. 예를 들어 일반적으로 우리나라 사람의 이름은 3자이다. 가끔씩 4자도 있어서 많은 사람들이 이름에 대한 데이터형을 varchar(8)로 선언해 놓는 경향이 있다. 그러므로 대부분이 2바이트를 줄였다고 생각하겠지만 구조적인 문제로 2바이트를 줄이지 못하고, 오히려 연산만 늘어나게 되는 꼴이 된다. 이런 경우라면 그냥 char(8)로 해 놓는 것이 더 낫다. mysql에는 varchar형이 255까지 였던 것으로 기억된다. 이것은 매우 합리적이다. 255바이트를 넘는 가변길이 문자형 컬럼이 많이 없기 때문이다. 255는 1바이트로 표현하는 최대치이므로 가변길이에 대한 오버헤드는 1바이트로 줄어든다. SQL Server도 이런거 되면 좋을꺼 같은데..