2010년 12월 25일 토요일

MySQL Character set 처리

MySQL에서 설정 가능한 Character set 관련 변수들은 아래와 같은 것들이 있다.
  • character_set_system (설정 불가능 변수) 
        MySQL 서버가 Identifier를 저장할 때 사용하는 Character set이며, 이 값은 섧정 불가능하고 항상 utf8로 설정되어 있다
  • character-set-server
        MySQL 서버의 기본 Character set
  • character_set_client
        MySQL 클라이언트의 기본 Character set
  • character_set_connection
        쿼리 문장에서 인트로듀서가 없는 리터럴 또는 Number를 String으로 변환할 때 사용하는 Character set
  • character_set_database
        MySQL 데이터베이스의 Default Character set
  • character_set_filesystem 
        LOAD DATA INFILE ... 또는 SELECT ... INTO OUTFILE 문장이 실행될 때, 파일의 읽고 쓰기에 사용되는 Character set
  • character_set_results
        MySQL 서버가 쿼리의 처리 결과를 클라이언트로 보낼 때 사용하는 Character set

Character set 변환 및 사용 다이어그램

Server - Client 간의 문자셋 변환
쿼리 실행 요청시
사용자가 요청한 쿼리 문장은 현재 character_set_client인데,
MySQL 서버는 이 쿼리 문장의 문자 셋을 character_set_connection 으로 변환 후 실행
만약, character_set_client와 character_set_connection이 동일할 경우 변환 없음

쿼리 결과 전송시
컬럼의 문자셋이 Latin2인데, character_set_results가 Latin1이라면
MySQL 서버는 컬럼의 값을 Latin2에서 Latin1으로 변환해서 리턴하며,
만약, 컬럼과 Character_set_results가 동일한 문자셋이면 변환 없음


CHARACTER SET 일괄 변경
SET NAMES 'utf8'; (현재 Connection에서만 효력)
charset utf8;     (Connection이 다시 연결되어도 효력)
명령으로, 아래 3개의 설정을 한번에 변경할 수 있음

SET character_set_client = 'utf8';
SET character_set_results = 'utf8';
SET character_set_connection = 'utf8';


댓글 없음:

댓글 쓰기