10.1.6 오류 메시지의 문자 세트
이 섹션에서는 서버가 오류 메시지를 구축해 클라이언트에 회신 할 경우 어떻게 문자 집합을 사용하는 방법에 대해 설명합니다. 오류 메시지 (문자 집합이 아닌) 언어의 자세한 내용은 섹션 10.2 "오류 메시지 언어 설정" 을 참조하십시오.
MySQL 5.6에서 서버는 UTF-8을 사용하여 오류 메시지를 구축하고 character_set_results
시스템 변수에서 지정된 문자 세트에서 클라이언트에 응답합니다.
서버는 다음과 같이 오류 메시지를 생성합니다.
메시지 템플릿에서 UTF-8이 사용됩니다.
메시지 템플릿 매개 변수가 특정 오류의 발생에 적용되는 값으로 대체됩니다.
테이블 이름과 컬럼 이름과 같은 식별자는 UTF-8을 내부적으로 사용하기 때문에 그대로 복사됩니다.
문자 (비 바이너리) 문자열 값은 해당 문자 세트에서 UTF-8로 변환됩니다.
이진 문자열 값은
0x20
에서0x7E
범위의 바이트에 대해서는 그대로 복사하고이 범위를 벗어나는 바이트 대해서는\x
16 진수 인코딩을 사용하여 복사됩니다. 예를 들어,0x41CF9F
을VARBINARY
고유 컬럼에 삽입하려고 할 때 중복 키 에러가 발생했을 경우,이 결과 생성되는 오류 메시지가 UTF-8이 사용되며 일부 바이트는 16 진수로 인코딩됩니다.Duplicate entry 'A\xC3\x9F' for key 1
메시지 작성 후이를 클라이언트에 반환하기 위해 서버는이 메시지를 UTF-8에서 character_set_results
시스템 변수에 의해 지정된 문자 세트로 변환합니다. character_set_results
에 NULL
또는 binary
값이있는 경우 변환되지 않습니다. 변수 값이 utf8
인 경우에도 이것이 원래 오류 메시지의 문자 세트와 일치하기 때문에 변환이 수행되지 않습니다.
character_set_results
로 표현할 수없는 문자의 경우 변환하는 동안 일부 인코딩이 일어날 수 있습니다. 인코딩은 Unicode 코드 포인트 값을 사용합니다.
Basic Multilingual Plane (BMP) 범위 (
0x0000
에서0xFFFF
)의 문자는\
표기를 사용하여 기록됩니다.nnnn
BMP 범위 외 (
0x01000
에서0x10FFFF
)의 문자는\+
표기를 사용하여 기록됩니다.nnnnnn
클라이언트는 character_set_results
을 설정하여 오류 메시지를받을 때 문자 집합을 제어 할 수 있습니다. 이 변수는 직접 설정하거나 SET NAMES
등의 방법으로 간접적으로 설정할 수 있습니다. character_set_results
대한 자세한 내용은 섹션 10.1.4 "연결 문자 집합 및 정렬 순서" 를 참조하십시오.
클라이언트에 오류 메시지를 회신하기 전에 character_set_results
로 변환하는 사이에 행해지는 인코딩 결과 이전 버전 (MySQL 5.5 이전 버전)과는 다른 메시지 내용이 될 수 있습니다. 예를 들어, ペ
(가타카나 배)라는 이름의 테이블을 삭제하려고 할 때 오류가 발생하고 character_set_results
가이 문자를 포함하지 않는 latin1
등의 문자 세트 인 경우 클라이언트로 전송되는 결과 메시지 다음과 같이 인코딩 된 테이블 이름이 표시됩니다.
ERROR 1051 (42S02): Unknown table '\30DA'
MySQL 5.5 이전에는 다음과 같이 이름이 인코딩되지 않습니다.
ERROR 1051 (42S02): Unknown table 'ペ