My Story... : 위치로그 : 태그 : 방명록 : 관리자 : 새글쓰기
My Story... 블로그에 오신것을 환영해요^^
그냥..
92
101
174967
'euckr'에 해당되는 글 1건
일본에서의 한국어와 동시사용이란 문제때문에 검색하다가 아주 훌륭한 팁을 발견!
역시 KLDP엔 해결책이 잘 나온다. ㅋㅋ


기존 디비는 euc-kr 데이터와 utf-8 데이터가 혼합되어 있습니다. 새 데이터베이스도 캐릭터셋을 혼합해서 사용 할 예정이고, 기존의 코드는 고치고 싶지 않습니다. 서버 세팅만으로의 마이그레이션을 원하는거죠.

결론은 my.cnf 의 [mysqld] 에 init_connect=set names binary 를 추가하는겁니다. 아래는 마이그레이션 과정에 신경써야 할 일을 적었습니다.

  1. my.cnf를 수정합니다.
    [mysqld] 항목에 다음을 추가합니다.

    character_set_server=euckr
    init_connect=SET names binary

    기존 디비가 UTF-8 위주였다면 euckr 대신 utf8 을 지정합니다. character_set_server 은 새 database 생성 시, CHARSET 옵션을 주지 않았을 경우에만 사용됩니다. 새 database 만들때의 기본값인거죠.

  2. 그리고 덤프를 뜹니다. 캐릭터셋이 다른 디비끼리 따로 떠도 되지만, 섞여 있어도 mysqldump -A 로 한번에 떠도 됩니다.
  3. 덤프를 손봅니다.
    1. 캐릭터셋이 한가지라면 이 부분은 건너뛰어도 무방합니다.
    2. 캐릭터셋이 섞여 있는 경우 database 생성부분을 캐릭터셋에 맞게 손봐줍니다.

      다른 database의 캐릭터셋에 맞게 DEFAULT CHARACTER SET 을 설정해줍니다,

      character_set_server 에 설정된 캐릭터셋과 동일한 database 라면 냅둬도 그대로 들어갑니다.

      원래:

      (..생략..)
      CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest-euc-kr;
      (..생략..)
      CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest-utf-8;
      (..생략..)

      수정:

      (..생략..)
      CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest_euc_kr;
      (..생략..)
      CREATE DATABASE /*!32312 IF NOT EXISTS*/ ctest_utf_8 CHARACTER SET utf8;
      (..생략..)

    3. 디비끼리 따로 뜬 경우엔 sql create 가 없으니 손으로 디비를 하나씩 만들어줍니다. 만들때 디비에 charset을 지정해줍니다.
  4. sql을 디비에 부어줍니다.

    디음과 같이 붓습니다. 그럼 변환 안하고 그대로 넣습니다.

    mysql -p --default-character-set=binary < dump.sql

    혹시 디비끼리 뜬 경우, 각 디비에 맞게 지정하고 부어도 됩니다.

    mysql -p db1 --default-character-set=euckr < db1.sql
    mysql -p db2 --default-character-set=utf8 < db2.sql

  5. 끝, 한글 문제가 없는지 확인합니다.
    1. 디비의 한글 데이터 표시에 문제가 없는지,
    2. 새로 디비에 한글 데이터를 넣었을 때 것도 잘 표시되는지,
    3. 정렬엔 문제가 없는지 봅니다.

클라이언트에서 사용하는 캐릭터셋을 믿을 수 있다면 binary 로 지정하여 변환하지 말아야 합니다.

이거 안하면 지맘대로 latin1 로 변환하죠. 이거가 일반적으로 가장 큰 문제입니다.
요넘을 binary 로 지정하면 character_set_client / character_set_results / character_set_connection 세녀석을 binary 로 세팅해서, 입출력 글자를 변환하지 않습니다.

관련 내용은 다음과 같습니다.
http://dev.mysql.com/doc/refman/5.0/en ··· ion.html
http://dev.mysql.com/doc/refman/5.0/en ··· ets.html

| binary | Binary pseudo charset | binary |

뭐 요점은 character_set_results, character_set_connection, character_set_client, character_set_connection 을 binary 로 잡는겁니다. 캐릭터셋을 변환하지 않아 데이터가 그대로 오가죠.. 기존의 3.x, 4.0 과 같은 방법입니다. 하지만 데이터베이스는 캐릭터셋이 지정되어 있어 정렬 등에 문제가 없습니다.


덕분에 삽질 많이 줄었다.
이글을 작성한 분께 감사를... ^^

출처 : http://kldp.org/node/81341
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
05 29, 2007 10:47 05 29, 2007 10:47