반응형

데이터베이스 환경 설정.
 - show variables like 'char%';

테이블 환경 설정.(Collation 확인)
 - show table status from [데이터베이스 명] like '[테이블명]%';


환경 변수 설명.
character_set_client
 - 클라이언트로부터 전달되는 명령문용 문자 셋.
 - 클라이언트에서 문장이 떠날 때 해당 문장은 어떤 문자셋으로 이루어져있는가의 문제.

character_set_connection
 - 클라이언트에서 넘어온 문장을 서버에서는 어떤 문자셋을 기준으로 해석해야하는가의 문제.
 - 문자 셋 인트로듀서 (introducer)를 갖고 있지 않는 리터럴 (literal) 및 숫자-문자 (number-to-string) 변환을 위해 사용되는 문자 셋.
모든 문자 스트링 리터럴은 문자 셋과 콜레션을 가지고 있다.
문자 스트링 리터럴은 하나의 문자 셋 인트로듀서 (introducer)와 COLLATE 구문을 옵션으로 가질 수도 있다:
[_charset_name]'string' [COLLATE collation_name]

예문:
SELECT 'string';
SELECT _latin1'string';
SELECT _latin1'string' COLLATE latin1_danish_ci;
간단한 명령문 SELECT 'string'의 경우, 스트링은 character_set_connection 과 collation_connection 시스템 변수가 정의하는 문자 셋과 콜레션을 갖는다.
_charset_name 수식은 일반적으로 인트로듀서 (introducer)라고 불린다. 이것은 파서 (parser)에게 “뒤에 따라오는 스트링은 문자 셋 X를 사용한다”라고 전달한다. 과거에는 이로 인해 사용자들이 혼란이 있었기 때문에, 인트로듀서는 어떠한 변환 (conversion)도 일으키지 않는다는 점을 강조한다; 엄밀히 말한다면, 이것은 스트링 값을 변경하지 않는 신호 (signal)이다. 또한, 인트로듀서는 표준 헥스 리터럴 (hex literal)과 헥스 리터럴 표기법 (x'literal' 및 0xnnnn) 보다 앞선 규칙이다.

character_set_database
 - 디폴트 데이터 베이스가 사용하는 문자 셋. 서버는 디폴트 데이터 베이스가 변할 때 마다 이 변수를 설정한다.
   디폴트 데이터 베이스가 없다면, 이 변수는 character_set_server와 같은 값을 가지게 된다.

character_set_filesystem
 - 파일 시스템 문자 셋.
   이 변수는 LOAD DATA INFILE 과 SELECT ... INTO OUTFILE 명령문 그리고 LOAD_FILE() 함수와 같은 파일 이름을 참조하는 스트링 리터럴을 해석하는데 사용된다.
   이러한 파일 이름은 파일을 오픈 하려는 시도가 있기 전에 character_set_client에서 character_set_filesystem으로 변환된다. 디폴트 값은 binary인데, 이것은 이무런 변환이 없다는 것을 의미한다. 멀티 바이트 파일 이름을 사용할 수 있는 시스템에서는 서로 다른 값을 사용하도록 한다. 예를 들면, 시스템이 UTF-8를 사용해서 파일 이름을 표시한다면, character_set_filesytem을 'utf8'로 설정한다. 이 변수는 MySQL 5.1.6에서 추가 되었다.

character_set_results
 - 쿼리 결과를 클라이언트에 리턴하기 위해 사용되는 문자 셋.
 - 서버에서 클라이언트로 응답을 넘겨줄때 어떤 문자셋으로 넘겨야하는가의 문제.

character_set_server
 - 서버의 디폴트 문자 셋

character_set_system
 - T 식별자 (identifier)를 저장하기 위해 서버가 사용하는 문자 셋. 그 값은 항상 utf8이 된다.

character_sets_dir
 - 문자 셋이 설치되어 있는 디렉토리.



문자 셋이란....
문자 셋이란 심볼과 인코딩 (encoding)을 의미한다. 콜레션은 하나의 문자 셋에 있는 문자들을 비교하기 위한 규칙 셋을 의미한다. 가상의 문자 셋을 사용해서 설명을 보다 명확히 하도록 하자.
 
4개의 문자를 사용하는 알파벳이 있다고 가정하자: ‘A’, ‘B’, ‘a’, ‘b’. 각각의 문자에 숫자를 하나씩 부여한다: ‘A’ = 0, ‘B’ = 1, ‘a’ = 2, ‘b’ = 3. 문자 ‘A’는 심볼이고, 숫자 0 은 ‘A’에 대한 인코딩이며, 네 개의 문자를 각각의 인코딩과 결합한 것이 문자 셋이 되는 것이다.
 
두 개의 스트링 값을 비교하는 경우를 가정하자: ‘A’ 와 ‘B’. 가장 간단하게 비교하는 방법은 각 문자의 인코딩을 살펴 보는 것이다: ‘A’의 0 과 ‘B’의 1. 0 이 1보다 작기 때문에, ‘A’가 ‘B’보다 작다고 말할 수 있다. 이와 같은 방법이 문자 셋에 대해서 콜레션을 적용한 것이다. 콜레션은 규칙 셋이다 (이와 같은 경우에는 한 가지 규칙만 있음): “인코딩을 비교한다.” 위와 같이 콜레션 방법 중에 가장 간단한 방법을 우리는 바이너리 콜레션이라고 부른다.

반응형

+ Recent posts