MySQL에서 CHAR와 NCHAR는 모두 고정 길이(fixed length) 문자열 데이터 타입입니다. 두 타입 모두 컬럼을 생성할 때 지정한 길이만큼의 저장 공간을 미리 확보하며, 입력된 문자열이 지정된 길이보다 짧으면 나머지 공간은 공백으로 채워진다는 공통점이 있습니다.
하지만 두 타입은 내부적으로 사용하는 문자 집합과 바이트 처리 방식에서 뚜렷한 차이를 보이며, 이러한 차이는 한글이나 다른 다국어 데이터를 저장할 때 특히 중요하게 작용합니다.
CHAR와 NCHAR의 주요 차이점 비교
| 구분 | CHAR | NCHAR |
|---|---|---|
| 전체 이름 | CHARACTER | NATIONAL CHARACTER |
| 문자 집합 | ASCII 문자 집합 사용 | 유니코드(Unicode) 문자 집합 사용, UTF-8 형식으로 저장 |
| 문자당 저장 공간 | 문자당 1바이트 | 문자당 2바이트 |
| 적합한 용도 | 영문, 숫자 등 ASCII 기반 데이터 | 한글, 일본어, 중국어 등 다국어 데이터 |
1. 전체 이름의 차이
CHAR는 CHARACTER의 줄임말이며, NCHAR는 NATIONAL CHARACTER의 줄임말입니다. 즉, NCHAR는 국가별 문자를 지원하기 위한 '내셔널(national)' 문자 타입이라는 의미를 담고 있습니다.
2. 문자 집합의 차이
CHAR는 기본적으로 ASCII 문자 집합을 사용합니다. 반면 NCHAR는 유니코드 문자 집합을 사용하고 데이터를 UTF-8 형식으로 저장합니다. 따라서 영어권 데이터만 다룬다면 CHAR로 충분하지만, 한글·중국어·일본어 같은 멀티바이트 문자를 안전하게 저장하려면 NCHAR가 더 적합합니다.
3. 저장 공간의 차이
CHAR는 문자당 1바이트를 차지하는 반면, NCHAR는 문자당 2바이트를 차지합니다. 예를 들어 CHAR(10)은 최대 10바이트를, NCHAR(10)은 최대 20바이트를 사용할 수 있습니다. 저장 용량 관점에서는 CHAR가 더 효율적이지만, 다국어 지원에는 한계가 있습니다.
4. 사용 예제
두 타입 모두 테이블 생성 시 동일한 문법으로 사용할 수 있습니다.
mysql> CREATE TABLE hello1(name CHAR(20));
Query OK, 0 rows affected (0.15 sec)
mysql> CREATE TABLE hello(name NCHAR(20));
Query OK, 0 rows affected (0.61 sec)
정리: 어떤 것을 선택해야 할까?
영문과 숫자 위주의 단순한 데이터라면 저장 공간 효율이 좋은 CHAR를, 한글을 포함한 다국어 데이터를 다룬다면 유니코드를 지원하는 NCHAR를 선택하는 것이 좋습니다. 참고로 MySQL에서는 테이블이나 컬럼 단위로 문자 집합(utf8mb4 등)을 직접 지정할 수 있으므로, 실무에서는 CHAR 컬럼에 utf8mb4 문자 집합을 적용해 다국어를 지원하는 방식도 널리 사용됩니다.