특수 문자가 포함된 테이블 이름 생성하기
MySQL에서는 a^b와 같이 특수 문자(^)가 포함된 이름의 테이블을 생성하려면 반드시 인용 부호(quote character)를 사용해야 합니다. 이때 사용할 수 있는 인용 부호의 종류는 ANSI_QUOTES SQL 모드의 설정 여부에 따라 달라집니다.
1. ANSI_QUOTES 모드가 비활성화된 경우
ANSI_QUOTES 모드가 비활성화되어 있으면 식별자(identifier) 인용 문자로 백틱(backtick, `)만 사용할 수 있습니다. 아래 예제에서는 백틱을 사용해 'a^b'라는 이름의 테이블을 성공적으로 생성하고, 큰따옴표를 사용한 경우 오류가 발생하는 것을 확인할 수 있습니다.
mysql> Create table `a^b`(`a^b` int);
Query OK, 0 rows affected (0.19 sec)
mysql> Create table "a^g"("a^g" int);
ERROR 1064 (42000): You have an error in your SQL syntax; check the
manual that corresponds to your MySQL server version for the right
syntax to use near '"a^g" ("a^g" int)' at line 1위 결과에서 볼 수 있듯이, 백틱으로 감싼 테이블은 정상적으로 생성되지만 큰따옴표를 사용하면 구문 오류(ERROR 1064)가 발생합니다.
2. ANSI_QUOTES 모드가 활성화된 경우
ANSI_QUOTES 모드를 활성화하면 백틱(`)과 큰따옴표(") 두 가지 인용 문자를 모두 사용할 수 있습니다. 아래 예제는 해당 모드를 활성화한 후 두 가지 인용 문자를 각각 사용하여 동일한 형식의 특수 문자 테이블을 생성하는 과정입니다.
mysql> Set sql_mode = 'ANSI_Quotes';
Query OK, 0 rows affected (0.03 sec)
mysql> Create table "a^d"("a^d" int);
Query OK, 0 rows affected (0.21 sec)
mysql> Create table `a^e`(`a^e` int);
Query OK, 0 rows affected (0.14 sec)모드 활성화 후에는 큰따옴표로 감싼 a^d 테이블도, 백틱으로 감싼 a^e 테이블도 모두 오류 없이 정상적으로 생성됩니다.
정리
요약하면 다음과 같습니다.
- 테이블 이름이나 열 이름에 ^ 같은 특수 문자가 포함된 경우 반드시 인용 부호로 감싸야 합니다.
- 기본 상태(ANSI_QUOTES 비활성화)에서는 백틱(`)만 사용 가능합니다.
SET sql_mode = 'ANSI_Quotes';명령으로 모드를 활성화하면 큰따옴표(")도 함께 사용할 수 있습니다.