MySQL에서 NCHAR는 CHAR 열이 미리 정의된(predefined) 문자 집합을 사용하도록 지정하는 데이터 타입입니다. MySQL은 기본 문자 집합으로 utf8을 사용하기 때문에, NCHAR로 선언된 열은 별도의 설정 없이도 자동으로 utf8 문자 집합을 갖게 됩니다.
NCHAR의 세 가지 동등한 선언 방식
NCHAR는 사실 다음 두 가지 표기법의 축약형(shorthand)입니다. 즉, 아래 세 가지 선언은 모두 완전히 동일한 결과를 만듭니다.
CHAR(10) CHARACTER SET utf8— 문자 집합을 직접 명시하는 방식NATIONAL CHARACTER(10)— SQL 표준 키워드를 사용하는 방식NCHAR(10)— 가장 짧게 쓸 수 있는 축약형
예제
다음 예제에서는 'Student1'이라는 테이블을 생성합니다. 이 테이블의 세 개 열은 서로 다른 선언 스타일로 작성되었지만, 실제로는 모두 같은 의미를 가집니다. 이것이 가능한 이유가 바로 NCHAR입니다.
mysql> Create table Student1(Name Char(10) character set utf8, Address NATIONAL CHARACTER(10), FatherName NCHAR(10)); Query OK, 0 rows affected (0.25 sec)
이제 아래 쿼리의 생성 상태를 확인해 보겠습니다.
mysql> show create table Student1\G *************************** 1. row *************************** Table: Student1 Create Table: CREATE TABLE `student1` ( `Name` char(10) CHARACTER SET utf8 DEFAULT NULL, `Address` char(10) CHARACTER SET utf8 DEFAULT NULL, `FatherName` char(10) CHARACTER SET utf8 DEFAULT NULL ) ENGINE = InnoDB DEFAULT CHARSET = latin1 1 row in set (0.00 sec)
결과에서 확인할 수 있듯이, Name, Address, FatherName 세 열 모두 char(10)에 CHARACTER SET utf8로 동일하게 정의되었습니다. 즉, NCHAR나 NATIONAL CHARACTER를 사용하면 일일이 'CHARACTER SET utf8'을 명시하지 않아도 같은 효과를 얻을 수 있어 코드가 더 간결해집니다.
참고: MySQL 버전에 따른 차이
MySQL 8.0부터는 기본 문자 집합이 utf8mb4로 변경되었기 때문에, NCHAR로 선언된 열은 utf8mb4 문자 집합을 사용합니다. 따라서 이모지 등 4바이트 문자를 저장해야 한다면 MySQL 8.0 이상에서 NCHAR를 활용하는 것이 유용합니다.