ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL charset encoding
    MySQL_Section/운영 2014. 11. 25. 01:15

    MySQL charset encoding

    Charset과 Collation의 차이

    A character set is a set of symbols and encodings. A collation is a set of rules for comparing characters in a character set.
    
    문자셋(character set)은 심볼(글자)과 인코딩의 묶음이고, Collation은 문자셋의 문자들을 비교하는 규칙이다.
    
    예를들어 글자 A=0, B=1, a=10, b=11 이라고 할 때 'A'는 글자이고 '0'은 인코딩이다. 여기서 볼 때 'A'와 'a'는 서로 다른 인코딩을 가지므로 다르다고 볼 수 있다.
    하지만 만약 대소문자를 구분하지 않는(case insensitive) collation을 지정하면 'A'='a'가 되게 되는 것이다. 대소문자를 지정하지 않는 Collation은 ''_ci''로 끝난다.

    기본 설정

    • UTF-8 설정 (Ubuntu : /etc/mysql/conf.d/encoding.cnf, RedHat /etc/my.cnf)
      #문자셋 지정
      [client]
      character-sets-dir=utf8
      
      [mysqld]
      init_connect=SET collation_connection = utf8_general_ci
      init_connect=SET NAMES utf8
      #default-character-set=utf8 # deprecated
      character-set-server=utf8
      collation-server=utf8_general_ci
    • 이후 service mysql restart

    DB 테이블 생성시 문자셋 지정

    참조 :MySQL and UTF-8

    Database:
    (CREATE | ALTER) DATABASE ... DEFAULT CHARACTER SET utf8
    
    Table:
    (CREATE | ALTER) TABLE ... DEFAULT CHARACTER SET utf8

    현재 문자셋 정보 보기

    show variables like 'c%';

    결과 –>

    character_set_client : utf8
    character_set_connection : utf8
    character_set_database : utf8
    character_set_results : utf8
    character_set_server : utf8
    character_set_system : utf8
    character_sets_dir : /usr/share/mysql/charsets/
    collation_connection : utf8_general_ci
    collation_database : utf8_general_ci
    collation_server : utf8_general_ci

    이미 생성된 데이터베이스의 문자셋 바꾸기

    -- 테이블의 문자셋 정보 확인.
    INFORMATION_SCHEMA.TABLES or SHOW CREATE TABLE [TABLENAME];
    mysql> SET character_set_client = utf8;
    mysql> SET character_set_results = utf8;
    mysql> SET character_set_connection = utf8;
    mysql> ALTER DATABASE [DB명] DEFAULT CHARACTER SET utf8;

    이미 데이터가 들어간 테이블의 문자셋 변환

    create table test (merong varchar(20) collate latin1_general_ci);
    
    -- 이렇게 만들어진 테이블에 한글 데이터를 넣은 후 필드를 euckr 로 변경하려면
    -- 다음처럼 해야 합니다.
    
    alter table test modify merong binary(100);
    alter table test modify merong varchar(20) collate euckr_korean_ci;
    
    -- binary 로 바꾸면 문자셋 특성이 사라지기 때문에 이런 변환과정을 거쳐야
    -- 합니다(메뉴얼에 의하면). 그냥 바꾸면 문자들이 손상됩니다.


    'MySQL_Section > 운영' 카테고리의 다른 글

    [MySQL] 성능 테스트  (0) 2014.12.07
    [MySQL] 패스워드 변경  (0) 2014.11.28
    [SP] Handler 정의 문장  (0) 2014.11.18
    [MySQL] 꿀팁 싸이트 ㅋ  (0) 2014.11.18
    mysql테이블 속성 및 구조변경 명령어  (0) 2014.11.18
Designed by Tistory.