9.1.1 문자열 리터럴
문자열은 작은 따옴표 ( ' '
') 또는 큰 따옴표 ( " "
")로 둘러싸인 바이트 또는 문자 시퀀스입니다. 예 :
'a string' "another string"
서로 옆에 인용 된 문자열은 하나의 문자열로 연결됩니다. 다음 줄은 동일합니다.
'a string' 'a' '' 'string'
ANSI_QUOTES
SQL 모드를 사용하는 경우는 큰 따옴표로 묶인 문자열 식별자로 해석되기 때문에 문자열 리터럴 따옴표는 작은 따옴표 만 사용할 수 있습니다.
이진 문자열은 문자 집합 및 데이터 정렬이없는 바이트 문자열입니다. 비 이진 문자열은 문자 세트와 데이터 정렬을 가진 문자열입니다. 이러한 두 문자열 타입은 문자열 단위의 수치에 따라 비교됩니다. 이진 문자열의 경우 단위는 바이트입니다. 비 바이너리 문자열의 경우 단위는 문자이며, 멀티 바이트 문자를 지원하는 문자 세트도 있습니다. 문자 값의 순서는 문자열 데이터 정렬 함수입니다.
문자열 리터럴은 옵션으로 문자 세트 인트로 듀서와 COLLATE
절을 지정할 수 있습니다.
[_ charset_name
] ' string
'[COLLATE collation_name
]
예 :
SELECT _latin1 'string
'; SELECT _latin1 'string
'COLLATE latin1_danish_ci;
N'
(또는 literal
'n'
)를 사용하면 각국 캐릭터 세트의 문자열을 만들 수 있습니다. 다음 명령문은 동일합니다. literal
'
SELECT N'some text '; SELECT n'some text '; SELECT _utf8'some text ';
이러한 문자열 구문의 형식 자세한 내용은 섹션 10.1.3.5 "문자열 리터럴 문자 집합 및 데이터 정렬" 및 섹션 10.1.3.6 "각국 캐릭터 세트" 를 참조하십시오.
NO_BACKSLASH_ESCAPES
SQL 모드가 활성화되어있는 경우를 제외하고 일부 시퀀스가 문자열에서 특별한 의미를 갖습니다. 이 시퀀스는 모두 이스케이프 문자로 알려진 백 슬래시 ( " \
")로 시작합니다. MySQL은 표 9.1 "특수 문자 이스케이프 시퀀스" 를 나타내는 이스케이프 시퀀스를 인식합니다. 다른 모든 이스케이프 시퀀스는 백 슬래시는 무시됩니다. 즉, 이스케이프 된 문자가 이스케이프되지 않은 것으로 해석됩니다. 예를 들어, " \x
"는 단순한" x
"입니다. 이러한 순서는 대소 문자를 구분합니다. 예를 들어, ' \b
'는 백 스페이스로 해석되지만,' \B
'는' B
'로 해석됩니다. 이스케이프는 character_set_connection
시스템 변수에 지정된 문자 세트에 따라 실행됩니다. 섹션 10.1.3.5 "문자열 리터럴 문자 집합 및 정렬 순서" 에 설명 된대로 다른 문자 집합을 나타내는 인트로 듀서가 앞에 놓여있는 문자열에 대해서도 같은 것을 말할 수 있습니다.
표 9.1 특수 문자 이스케이프 시퀀스
이스케이프 시퀀스 | 순서가 나타내는 문자 |
---|---|
\0 | ASCII NUL ( 0x00 ) 문자. |
\' | 작은 따옴표 ( ' ' ') 문자. |
\" | 큰 따옴표 ( " " ") 문자. |
\b | 백 스페이스 문자. |
\n | 개행 (줄 바꿈) 문자. |
\r | 구간. |
\t | 탭 문자. |
\Z | ASCII 26 (Ctrl + Z). 표에 따라 기재되어있는 주석을 참조하십시오. |
\\ | 백 슬래시 ( " \ ") 문자. |
\% | " % "문자. 표에 따라 기재되어있는 주석을 참조하십시오. |
\_ | " _ "문자. 표에 따라 기재되어있는 주석을 참조하십시오. |
ASCII 26 문자를 ' \Z
"로 인코딩하면 Windows에서 ASCII 26 END-OF-FILE을 나타낸다고하는 문제를 해결할 수 있습니다. mysql
을 사용하려고하면 파일의 ASCII 26 문제를 일으 킵니다. db_name
< file_name
" \%
"와" \_
"시퀀스는 패턴 매칭 컨텍스트에서 리터럴 인스턴스 ' %
'및' _
'를 검색하는 데 사용됩니다 (패턴 매칭 컨텍스트 외부에서 와일드 카드 문자로 해석된다). 섹션 12.5.1 "문자열 비교 함수" 의 LIKE
연산자에 대한 설명을 참조하십시오. 패턴 매칭 컨텍스트 외부에서 ' \%
'또는' \_
'를 사용하면' %
',' _
'가 아니라 문자열 " \%
"," \_
"로 평가됩니다.
문자열에 따옴표를 포함하는 방법은 여러 가지가 있습니다.
'
'
'로 둘러싼 문자열에서''
'를 사용하려면'''
"라고 설명합니다."
"
"로 묶인 문자열에서""
"를 사용하는 경우에는"""
"라고 설명합니다.인용 부호 문자의 직전에 이스케이프 문자 ( "
\
")를 지정합니다."
"
"로 묶인 문자열에서 ''
'을 사용하는 경우 따옴표를 2 개 계속해 입력하거나 회피하는 등의 특별한 조치가 필요하지 않습니다. 마찬가지로, ''
'로 둘러싼 문자열에서 ""
"를 사용하는 경우에도 특별한 처리가 필요하지 않습니다.
다음의 SELECT
문은 따옴표를 사용했을 경우와 탈출을 사용한 경우에 어떤 효과가 있는지를 보여줍니다.
mysql>SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+ | hello | "hello" | ""hello"" | hel'lo | 'hello | +-------+---------+-----------+--------+--------+ mysql>SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";
+-------+---------+-----------+--------+--------+ | hello | 'hello' | ''hello'' | hel"lo | "hello | +-------+---------+-----------+--------+--------+ mysql>SELECT 'This\nIs\nFour\nLines';
+--------------------+ | This Is Four Lines | +--------------------+ mysql>SELECT 'disappearing\ backslash';
+------------------------+ | disappearing backslash | +------------------------+
문자열 컬럼 ( BLOB
컬럼 등)에 바이너리 데이터를 삽입하는 경우 어떤 문자도 이스케이프 시퀀스로 표현합니다. 백 슬래시 ( " \
")로 문자열 주위에 따옴표는 이스케이프해야합니다. 특정 클라이언트 환경에서 NUL
이나 Ctrl + Z도 탈출해야합니다. mysql 클라이언트는 NUL
문자가 이스케이프되지 않은 경우이를 포함 인용 된 문자열을 자릅니다. Ctrl + Z는 이스케이프되어 있지 않은 경우, Windows에서 END-OF-FILE을 나타내는 것으로 간주 될 수 있습니다. 이러한 각각의 문자를 나타내는 이스케이프 시퀀스는 표 9.1 "특수 문자 이스케이프 시퀀스" 를 참조하십시오.
응용 프로그램을 작성할 경우 MySQL Server에 전송되는 SQL 문에서 문자열 데이터 값으로 사용되기 전에 이러한 특수 문자를 포함 할 수있는 문자열은 올바르게 이스케이프해야합니다. 여기에는 다음의 두 가지 방법이 있습니다.
특수 문자를 이스케이프 함수를 사용하여 문자열을 처리합니다. C 프로그램은 C API 함수
mysql_real_escape_string()
을 사용하여 문자를 이스케이프 수 있습니다. 섹션 23.8.7.54 "mysql_real_escape_string ()" 를 참조하십시오. 다른 SQL 문을 구성하는 SQL 문에서는QUOTE()
함수를 사용할 수 있습니다. Perl DBI 인터페이스는quote
메소드를 사용하여 특수 문자를 적절한 이스케이프 시퀀스로 변환 할 수 있습니다. 섹션 23.10 "MySQL Perl API" 를 참조하십시오. 다른 언어 인터페이스에서도 같은 기능을 이용할 수 있습니다.특수 문자를 명시 적으로 탈출하는 방법 이외에 많은 MySQL API는 문 문자열에 특수 마커를 삽입하고 문을 발행 할 때 데이터 값을 해당 표시에 바인딩 할 수 플레이스 홀더 기능이 있습니다 . 이 경우 값의 특수 문자 이스케이프는 API에 의해 자동으로 이루어집니다.