Loading...
MySQL 9.5 Reference Manual 9.5의 11.1.1 String Literals의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
string은 바이트 또는 문자들의 시퀀스로, 작은따옴표(')나 큰따옴표(") 문자로 둘러싸여 있습니다. 예시는 다음과 같습니다:
1'a string' 2"another string"
서로 인접해서 놓인 quoted string들은 하나의 string으로 연결(concatenate)됩니다. 다음 줄들은 서로 동일합니다:
1'a string' 2'a' ' ' 'string'
ANSI_QUOTES SQL mode가 사용 설정되어 있으면, string literal은 작은따옴표로만 둘러싸서 quote할 수 있습니다. 큰따옴표로 둘러싸인 string은 식별자로 해석되기 때문입니다.
binary string은 바이트의 string입니다. 모든 binary string은 binary라는 문자 집합과 collation을 가집니다. nonbinary string은 문자들의 string입니다. binary가 아닌 문자 집합을 가지며, 그 문자 집합과 호환되는 collation을 가집니다.
두 종류의 string 모두에 대해, 비교는 string 단위의 숫자 값에 기반하여 이루어집니다. binary string의 경우 단위는 바이트이며, 비교는 숫자 바이트 값을 사용합니다. nonbinary string의 경우 단위는 문자이고, 일부 문자 집합은 멀티바이트 문자를 지원합니다. 비교는 숫자 문자 코드 값을 사용합니다. 문자 코드의 순서는 string collation의 함수입니다. (자세한 내용은 Section 12.8.5, “The binary Collation Compared to _bin Collations”를 참조하십시오.)
참고
mysql 클라이언트 내에서, binary string은 --binary-as-hex 값에 따라 16진수 표기(HEX notation)를 사용해 표시됩니다. 해당 옵션에 대한 자세한 내용은 Section 6.5.1, “mysql — The MySQL Command-Line Client”를 참조하십시오.
character string literal은 선택적인 문자 집합 introducer와 COLLATE 절을 가질 수 있으며, 이를 통해 특정 문자 집합과 collation을 사용하는 string으로 지정할 수 있습니다:
1[_charset_name]'string' [COLLATE collation_name]
예시는 다음과 같습니다:
1SELECT _latin1'string'; 2SELECT _binary'string'; 3SELECT _utf8mb4'string' COLLATE utf8mb4_danish_ci;
N'literal' (또는
n'literal')을 사용하여 national 문자 집합에서 string을 생성할 수 있습니다. 다음 statement들은 동일합니다:
1SELECT N'some text'; 2SELECT n'some text'; 3SELECT _utf8'some text';
이러한 형태의 string syntax에 대한 정보는 Section 12.3.7, “The National Character Set” 및 Section 12.3.8, “Character Set Introducers”를 참조하십시오.
string 내에서, NO_BACKSLASH_ESCAPES SQL mode가 사용 설정되어 있지 않다면 특정 시퀀스는 특별한 의미를 가집니다. 이러한 각 시퀀스는 백슬래시(\)로 시작하며, 이를 escape
_character_라고 합니다. MySQL은 Table 11.1, “Special Character Escape Sequences”에 나열된 escape sequence를 인식합니다. 그 밖의 다른 escape sequence에 대해서는, 백슬래시는 무시됩니다. 즉, escape된 문자는 escape되지 않은 것처럼 해석됩니다. 예를 들어, \x는 단순히 x입니다.
이러한 시퀀스는 대소문자를 구분합니다. 예를 들어,
\b는 backspace로 해석되지만,
\B는 B로 해석됩니다.
escape 처리는 character_set_connection 시스템 변수(system variable)가 나타내는 문자 집합에 따라 수행됩니다. 이는 Section 12.3.6, “Character String Literal Character Set and Collation”에서 설명된 것처럼, 다른 문자 집합을 나타내는 introducer가 앞에 붙은 string에 대해서도 마찬가지입니다.
Table 11.1 Special Character Escape Sequences
| Escape Sequence | Character Represented by Sequence |
|---|---|
\0 | ASCII NUL (X'00') character |
\' | 작은따옴표(') character |
\" | 큰따옴표(") character |
\b | backspace character |
\n | newline (linefeed) character |
\r | carriage return character |
\t | tab character |
\Z | ASCII 26 (Control+Z); 표 다음에 이어지는 note 참조 |
\\ | 백슬래시(\) character |
\% | % character; 표 다음에 이어지는 note 참조 |
\_ | _ character; 표 다음에 이어지는 note 참조 |
ASCII 26 문자는 \Z로 인코딩할 수 있으며, 이를 통해 Windows에서 ASCII 26이 END-OF-FILE을 의미하는 문제를 회피할 수 있습니다. 파일 내의 ASCII 26은 mysql db_name < file_name을 사용하려 할 때 문제를 일으킵니다.
\% 및 \_ 시퀀스는 pattern-matching 컨텍스트에서 원래는 와일드카드 문자로 해석될 %와 _의 리터럴 인스턴스를 검색하기 위해 사용됩니다. LIKE 연산자(operator)에 대한 설명은
Section 14.8.1, “String Comparison Functions and Operators”를 참조하십시오. pattern-matching 컨텍스트 외부에서
\% 또는 \_를 사용하면, 이들은 %와 _가 아니라
각각 \%와 \_ string으로 평가됩니다.
string 안에 quote 문자를 포함하는 방법은 여러 가지가 있습니다:
'로 둘러싸인 string 내부의 '는
''로 작성할 수 있습니다.
"로 둘러싸인 string 내부의 "는
""로 작성할 수 있습니다.
escape 문자(\)를 quote 문자 앞에 붙입니다.
"로 둘러싸인 string 내부의 '는 특별한 처리가 필요 없으며, 두 번 쓰거나 escape할 필요가 없습니다. 마찬가지로 '로 둘러싸인 string 내부의 "도 특별한 처리가 필요 없습니다.
다음 SELECT statement는 quoting과 escaping이 어떻게 동작하는지 보여 줍니다:
1mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello'; 2+-------+---------+-----------+--------+--------+ 3| hello | "hello" | ""hello"" | hel'lo | 'hello | 4+-------+---------+-----------+--------+--------+ 5 6mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello"; 7+-------+---------+-----------+--------+--------+ 8| hello | 'hello' | ''hello'' | hel"lo | "hello | 9+-------+---------+-----------+--------+--------+ 10 11mysql> SELECT 'This\nIs\nFour\nLines'; 12+--------------------+ 13| This 14Is 15Four 16Lines | 17+--------------------+ 18 19mysql> SELECT 'disappearing\ backslash'; 20+------------------------+ 21| disappearing backslash | 22+------------------------+
binary data를 string 컬럼(예: BLOB 컬럼) 안에 삽입하려면, 특정 문자를 escape sequence로 표현해야 합니다. 백슬래시(\)와 string을 quote하는 데 사용된 quote 문자는 escape해야 합니다. 특정 클라이언트 환경에서는 NUL이나 Control+Z도 escape해야 할 수 있습니다.
mysql 클라이언트는 NUL 문자가 escape되지 않은 상태로 포함된 quoted string을 잘라내며(truncate), Control+Z는 escape하지 않으면 Windows에서 END-OF-FILE로 간주될 수 있습니다. 이러한 문자 각각을 나타내는 escape sequence에 대해서는
Table 11.1, “Special Character Escape Sequences”를 참조하십시오.
application program을 작성할 때, 이러한 special character를 포함할 수 있는 모든 string은 그 string이 MySQL 서버로 전송되는 SQL statement 내에서 data value로 사용되기 전에 적절하게 escape되어야 합니다. 이를 수행하는 방법은 두 가지입니다:
special character를 escape하는 함수를 사용해 string을 처리합니다. C 프로그램에서는 mysql_real_escape_string_quote() C API 함수(function)를 사용해 문자를 escape할 수 있습니다. mysql_real_escape_string_quote()를 참조하십시오. 다른 SQL statement를 구성하는 SQL statement 내에서는 QUOTE() 함수를 사용할 수 있습니다. Perl DBI 인터페이스(interface)는 special character를 적절한 escape sequence로 변환하는 quote 메서드(method)를 제공합니다. Section 31.9, “MySQL Perl API”를 참조하십시오. 다른 언어 인터페이스도 유사한 기능을 제공할 수 있습니다.
special character를 명시적으로 escape하는 방법의 대안으로, 많은 MySQL API는 placeholder 기능을 제공하여, statement string에 special marker를 삽입한 뒤, statement를 실행할 때 그 marker에 data value를 바인딩할 수 있게 합니다. 이 경우, API가 value 내 special character의 escaping을 대신 처리해 줍니다.
11.1 Literal Values
11.1.2 Numeric Literals