Loading...
MySQL 9.5 Reference Manual 9.5의 11.2 Schema Object Names의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
11.2.1 Identifier Length Limits
11.2.2 Identifier Qualifiers
11.2.3 Identifier Case Sensitivity
11.2.4 Mapping of Identifiers to File Names
11.2.5 Function Name Parsing and Resolution
database, table, index, column, alias, view, stored procedure, partition, tablespace, resource group 및 기타 객체 이름을 포함한 MySQL 내 특정 객체들은 identifier로 알려져 있습니다. 이 섹션은 MySQL에서 identifier에 허용되는 구문을 설명합니다.
Section 11.2.1, “Identifier Length Limits”는 각 유형의 identifier에 대한 최대 길이를 나타냅니다. Section 11.2.3, “Identifier Case Sensitivity”는 어떤 종류의 identifier가 어떤 조건에서 대소문자를 구분하는지 설명합니다.
identifier는 quoted 또는 unquoted일 수 있습니다. identifier에 특수 문자가 포함되거나 예약어인 경우에는, 이를 참조할 때마다 반드시( must ) quote해야 합니다. (예외: qualified name에서 마침표 다음에 오는 예약어는 반드시 identifier이므로 quote할 필요가 없습니다.) 예약어는 Section 11.3, “Keywords and Reserved Words”에 나열되어 있습니다.
내부적으로 identifier는 유니코드(UTF-8)로 변환되어 저장됩니다. identifier에서 허용되는 유니코드 문자는 Basic Multilingual Plane(BMP)에 있는 문자입니다. supplementary 문자는 허용되지 않습니다.
따라서 identifier에는 다음과 같은 문자를 포함할 수 있습니다:
unquoted identifier에서 허용되는 문자:
ASCII: [0-9,a-z,A-Z$_] (기본 라틴 문자, 숫자 0-9, dollar, underscore)
확장: U+0080 .. U+FFFF
quoted identifier에서 허용되는 문자는 U+0000을 제외한 전체 유니코드 Basic Multilingual Plane(BMP)을 포함합니다:
ASCII: U+0001 .. U+007F
확장: U+0080 .. U+FFFF
ASCII NUL(U+0000) 및 supplementary 문자(U+10000 이상)는 quoted 및 unquoted identifier 모두에서 허용되지 않습니다.
identifier는 숫자로 시작할 수 있지만, quote되지 않은 경우 숫자로만 구성될 수는 없습니다.
database, table, column 이름은 공백 문자로 끝날 수 없습니다.
qualifier와 함께 사용되는 이름을 포함하여 database, table, view, column, stored program, alias의 unquoted 이름에서 첫 번째 문자로 dollar sign를 사용하는 것은 deprecated입니다( Section 11.2.2, “Identifier Qualifiers” 참조). dollar sign로 시작하는 unquoted identifier는 추가적인 dollar sign 문자를 포함할 수 없습니다. 그렇지 않은 경우, 선행 dollar sign는 허용되지만 deprecation warning을 발생시킵니다.
이러한 identifier의 선행 문자로 dollar sign를 사용하는 것은, 이 섹션 뒷부분에 제시된 규칙에 따라 quote된 경우 warning 없이 여전히 사용할 수 있습니다.
identifier quote 문자(quote character)는 backtick(`````)입니다:
1mysql> SELECT * FROM `select` WHERE `select`.id > 100;
ANSI_QUOTES SQL mode가 활성화된 경우, identifier를 double quotation mark로 quote하는 것도 허용됩니다:
1mysql> CREATE TABLE "test" (col INT); 2ERROR 1064: You have an error in your SQL syntax... 3mysql> SET sql_mode='ANSI_QUOTES'; 4mysql> CREATE TABLE "test" (col INT); 5Query OK, 0 rows affected (0.00 sec)
ANSI_QUOTES mode는 서버가 double-quoted 문자열을 identifier로 해석하도록 합니다. 따라서 이 mode가 활성화되어 있을 때는, 문자열 리터럴은 single quotation mark로 둘러싸야 합니다. double quotation mark로 둘러쌀 수 없습니다. 서버 SQL mode는 Section 7.1.11, “Server SQL Modes”에 설명된 대로 제어됩니다.
identifier quote 문자는 identifier를 quote하면 그 안에 포함할 수 있습니다. identifier 안에 포함할 문자가 identifier 자체를 quote하는 데 사용하는 문자와 동일한 경우, 해당 문자를 두 번 써야 합니다. 다음 문장은 a`b라는 이름의 table을 생성하며, 이 table은 c"d라는 이름의 column을 포함합니다:
1mysql> CREATE TABLE `a``b` (`c"d` INT);
query의 select list에서, quoted column alias는 identifier 또는 문자열 quote 문자를 사용해 지정할 수 있습니다:
1mysql> SELECT 1 AS `one`, 2 AS 'two'; 2+-----+-----+ 3| one | two | 4+-----+-----+ 5| 1 | 2 | 6+-----+-----+
statement의 다른 위치에서 alias에 대한 quoted reference를 사용할 때는 identifier quoting을 사용해야 하며, 그렇지 않으면 reference가 문자열 리터럴로 처리됩니다.
Me 또는 MeN으로 시작하는 이름은 사용하지 않는 것이 좋습니다. 여기서 M 과 N 은 정수입니다. 예를 들어, 1e를 identifier로 사용하는 것은 피해야 합니다. 왜냐하면 1e+3과 같은 expression이 모호하기 때문입니다. context에 따라, 이는 expression 1e + 3으로 해석되거나 숫자 1e+3으로 해석될 수 있습니다.
MD5()를 사용하여 table 이름을 생성할 때는 주의해야 합니다. 이 함수는 방금 설명한 것과 같이, 허용되지 않거나 모호한 형식의 이름을 생성할 수 있기 때문입니다.
또한 functional index에 대한 기존 hidden column에서 사용되는 이름과 충돌하지 않도록, !hidden!으로 시작하는 column 이름은 사용하지 않는 것이 좋습니다.
user variable은 SQL statement에서 identifier 또는 identifier의 일부로 직접 사용할 수 없습니다. 자세한 정보와 우회 방법의 예시는 Section 11.4, “User-Defined Variables”를 참고하십시오.
database 및 table 이름에 포함된 특수 문자는 Section 11.2.4, “Mapping of Identifiers to File Names”에 설명된 대로 해당 파일 시스템 이름에서 인코딩됩니다.
11.1.7 NULL Values
11.2.1 Identifier Length Limits