char와 varchar는 데이터베이스에서 문자열 데이터를 저장하는 데 사용되는 데이터 타입이다.
둘 다 문자열 데이터를 저장하는 데 사용되지만, 동작 및 성능에 차이가 있다.
char는 고정 길이 문자열 데이터를 저장하는 데 사용된다.
예를 들어, char(10)으로 정의된 열은 영문 10개의 문자를 저장할 수 있다.
이 경우, 실제 데이터가 10자보다 적으면 남는 공간은 공백으로 채워진다.
데이터 검색과 같은 일부 작업에서 유리하다는 장점이 있으나 데이터가 실제로 저장된 공간보다 작을 경우, 저장공간의 일부분이 불필요하게 낭비된다.
반면, varchar는 가변 길이 문자열 데이터를 저장하는 데 사용된다.
예를 들어, varchar(10)으로 정의된 열은 최대 영문 10자의 문자열을 저장할 수 있다. 이 경우, 실제 데이터 크기에 따라 저장공간의 크기가 결정된다. varchar는 고정 길이 문자열 데이터를 저장하는 char에 비해 저장공간을 더 효율적으로 사용할 수 있다. 그러나 문자열 데이터의 길이가 긴 경우 데이터를 검색하거나 정렬하는 데에는 성능 저하가 발생할 수 있다.
예를 들어, "ID"라는 컬럼을 가지는 "Users" 테이블을 생성할 때, "ID" 컬럼을 char 혹은 varchar로 정의할 수 있다.
char를 사용하여 "ID" 컬럼을 정의할 경우:
CREATE TABLE Users (
ID CHAR(10) PRIMARY KEY,
Name VARCHAR(50),
Age INT
);
위 코드에서 "ID" 컬럼을 char(10)로 정의했다. 이는 "ID" 컬럼에 고정 길이 10자를 저장할 수 있다는 것을 의미한다.
"ID"가 "1234567890"인 경우, 저장공간은 10자로 정해진다. 하지만 "ID"가 "1"인 경우에도 10자의 공간이 할당되어 불필요하게 낭비된다.
varchar를 사용하여 "ID" 컬럼을 정의할 경우:
CREATE TABLE Users (
ID VARCHAR(10) PRIMARY KEY,
Name VARCHAR(50),
Age INT
);
위 코드에서 "ID" 컬럼을 varchar(10)로 정의했다. 이는 "ID" 컬럼이 최대 10자의 가변 길이 문자열을 저장할 수 있다는 것을 의미하고, "ID"가 "1234567890"인 경우, 10자의 공간이 할당된다.
하지만 "ID"가 "1"인 경우에는 실제로 저장된 데이터 크기만큼의 공간이 할당되므로, 1자의 공간만 할당된다.
따라서, char는 고정 길이 데이터를 저장하는데 적합하고, varchar는 가변 길이 데이터를 저장하는데 적합하다.
선택은 데이터의 특성과 사용하는 데이터베이스의 성능 요구 사항에 따라 달라진다.