레이블이 CharacterSet인 게시물을 표시합니다. 모든 게시물 표시
레이블이 CharacterSet인 게시물을 표시합니다. 모든 게시물 표시

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';