9.2 스키마 개체 이름
데이터베이스, 테이블, 인덱스, 컬럼, 별칭, 뷰, 저장 프로 시저, 파티션 테이블 공간, 다른 개체 이름 등 MySQL의 특정 객체 식별자로 알려져 있습니다. 이 섹션에서는 MySQL에서 식별자에 대해 허용되는 구문을 설명합니다. 섹션 9.2 "식별자의 대문자와 소문자 ' 에서는 어떤 유형의 식별자가 어떤 조건에서 대소 문자를 구별하는 방법을 설명합니다.
식별자는 따옴표로 묶어도 묶지 수 있습니다. 식별자에 특수 문자가 포함되어 있거나 식별자가 예약어 인 경우, 그 식별자를 참조 할 때는 반드시 따옴표로 묶어야합니다. (예외 : 수식 명에 마침표 이후의 예약어는 식별자이어야하므로 따옴표로 묶을 필요는 없습니다.) 예약어는 섹션 9.3 "예약어" 에 기재되어 있습니다.
식별자는 내부적으로 Unicode로 변환됩니다. 다음 문자를 포함 할 수 있습니다.
인용되지 않은 식별자에서 허용되는 문자.
ASCII : 0-9, az, AZ $ _ (기본적인 라틴 문자, 숫자 0-9, 달러, 밑줄)
확장 : U + 0080 ..U + FFFF
인용 된 식별자에 허용되는 문자는 U + 0000를 제외하고 전체 Unicode Basic Multilingual Plane (BMP)가 포함되어 있습니다.
ASCII : U + 0001 ..U + 007F
확장 : U + 0080 ..U + FFFF
ASCII NUL (U + 0000)와 보조 문자 (U + 10000 이상)은 인용 된 식별자 또는 인용되지 않은 식별자에서 허용되지 않습니다.
식별자는 숫자로 시작할 수 있지만, 인용 부호로 둘러싸여 있지 않은 한, 숫자로만 구성 할 수 없습니다.
데이터베이스 명, 테이블 명 및 컬럼 이름은 공백으로 끝낼 수 없습니다.
식별자 인용 문자는 역 따옴표 ( " `
")입니다.
mysql> SELECT * FROM `select` WHERE `select`.id > 100;
ANSI_QUOTES
SQL 모드가 활성화되어 있으면 큰 따옴표 내에서 식별자를 따옴표로 묶어도 허용되어 있습니다.
mysql>CREATE TABLE "test" (col INT);
ERROR 1064 : You have an error in your SQL syntax ... mysql>SET sql_mode='ANSI_QUOTES';
mysql>CREATE TABLE "test" (col INT);
Query OK, 0 rows affected (0.00 sec)
ANSI_QUOTES
모드는 서버는 큰 따옴표로 둘러싸인 문자열을 식별자로 해석합니다. 따라서이 모드가 활성화되어있을 때 문자열 리터럴은 작은 따옴표로 묶어야합니다. 큰 따옴표로 묶을 수는 없습니다. 서버 SQL 모드는 섹션 5.1.7 "서버 SQL 모드" 에서 설명한대로 제어됩니다.
식별자가 따옴표로 둘러싸여 있으면, 식별자 따옴표 문자를 식별자 내에 포함 할 수 있습니다. 식별자에 포함 문자가 식별자 자체를 둘러싸는 데 사용하는 따옴표와 같은 경우, 문자를 이중으로해야합니다. 다음 문은 c"d
라는 이름의 컬럼을 포함한 a`b
라는 테이블을 만듭니다.
mysql> CREATE TABLE `a``b` (`c"d` INT);
쿼리 선택 목록에서 인용 한 컬럼 별칭을 지정하려면 식별자 또는 문자열 인용 문자를 사용합니다.
mysql> SELECT 1 AS `one`, 2 AS 'two';
+-----+-----+
| one | two |
+-----+-----+
| 1 | 2 |
+-----+-----+
문에서 어디에 지정하는 경우에도 별칭에 인용 한 참조 식별자 따옴표를 사용해야합니다. 그렇지 않으면, 참조는 문자열 리터럴로 처리됩니다.
와 M
e
(이 경우 M
e N
M
과 N
은 정수)로 시작하는 이름을 사용하지 않는 것이 추천되고 있습니다. 예를 들어, 1e
를 식별자로 사용하지 마십시오. 이것은 1e+3
등의 표현이 모호하기 때문입니다. 컨텍스트에 따라 수식 1e + 3
로 또는 숫자 1e+3
로 해석 될 수 있습니다.
해서 테이블 이름을 생성하는데 MD5()
를 사용하는 경우는주의가 필요합니다. 왜냐하면 이것은 전술 한 바와 같은 잘못된 형식이나 모호한 형식으로 이름을 생성 할 수 있기 때문입니다.
사용자 변수 식별자 또는 식별자의 일부로 SQL 문에서 직접 사용할 수 없습니다. 해결 방법의 자세한 내용과 예제는 섹션 9.4 "사용자 정의 변수" 를 참조하십시오.
섹션 9.2.3 "식별자와 파일 이름 매핑" 에서 설명하고있는 바와 같이, 데이터베이스와 테이블 이름에 특수 문자는 해당 파일 시스템 이름으로 인코딩됩니다. 특수 문자가 포함 된 이전 버전의 MySQL 데이터베이스 또는 테이블이 있고 그것의 기본 디렉토리 또는 파일 이름이 새로운 인코딩을 사용하도록 업데이트되지 않은 경우, 서버는 그 이름에 #mysql50#
라는 접두어 으로 표시합니다. 이 같은 이름을 찾거나 새로운 인코딩으로 변환 자세한 내용은 해당 섹션을 참조하십시오.
다음 표에는 식별자 유형 당 최대 길이가 표시되어 있습니다.
식별자 | 최대 길이 (문자) |
---|---|
Database | 64 ( NDB 스토리지 엔진 : 63) |
테이블 | 64 ( NDB 스토리지 엔진 : 63) |
컬럼 | 64 |
인덱스 | 64 |
제약 | 64 |
저장 프로그램 | 64 |
뷰 | 64 |
테이블 공간 | 64 |
서버 | 64 |
로그 파일 그룹 | 64 |
별칭 | 256 (표 다음의 예외를 참조하십시오) |
복합 문 라벨 | 16 |
CREATE VIEW
문에서 컬럼 이름에 대한 별칭 (256 문자의 최대의 별칭 길이가 아니라) 64 문자의 최대 컬럼 길이에 대해 검사됩니다.
식별자는 Unicode (UTF-8)를 사용하여 저장됩니다. 이것은 .frm
파일에 저장된 테이블 정의의 식별자와 mysql
데이터베이스의 부여 테이블에 저장된 식별자에 적용됩니다. 부여 테이블의 식별자 문자열 컬럼의 크기는 문자로 측정됩니다. 이 컬럼에 저장되는 값에 허용되는 문자 수를 줄일 필요없이 멀티 바이트 문자를 사용할 수 있습니다. 이것은 MySQL 4.1 이전에는 적용되지 않습니다. 전술 한 바와 같이 허용 된 Unicode 문자는 Basic Multilingual Plane (BMP)의 문자입니다. 보조 문자는 허용되지 않습니다.
MySQL Cluster는 데이터베이스 및 테이블의 이름에 63 문자의 최대 길이를 부과합니다. 섹션 18.1.6.5 "MySQL Cluster의 데이터베이스 개체에 대한 제한" 을 참조하십시오.