MySQL UTF/유니코드 마이그레이션 팁
-
09-06-2019 - |
문제
MySQL 테이블을 대소문자를 구분하지 않는 기본 스웨덴어 또는 ASCII 문자 세트에서 utf-8로 마이그레이션하려고 할 때 주의해야 할 팁이나 순간이 있는 사람이 있습니까?제가 참여하고 있는 일부 프로젝트는 더 나은 국제화를 위해 노력하고 있으며 데이터베이스는 이러한 변화의 중요한 부분이 될 것입니다.
데이터베이스를 변경하기 전에 각 사이트를 UTF-8 문자 인코딩(가장 덜 중요한 것부터 가장 중요한 것까지)을 사용하도록 변환하여 모든 입력/출력이 동일한 문자 집합을 사용하도록 할 것입니다.
어떤 도움을 주셔서 감사합니다
해결책
몇 가지 힌트:
- 당신의
CHAR
그리고VARCHAR
열은 최대 3배 더 많은 디스크 공간을 사용합니다.(아마도 스웨덴어 단어에 대한 디스크 공간이 많이 늘어나지 않을 것입니다.) - 사용
SET NAMES utf8
데이터베이스를 읽거나 쓰기 전에.그렇지 않으면 부분적으로 잘못된 문자가 표시됩니다.
다른 팁
답변을 찾는 데 도움이 되도록 다음 사이트/기사를 검토하겠습니다.
모든 소프트웨어 개발자가 유니코드 및 문자 집합에 대해 절대적으로, 긍정적으로 알아야 하는 최소한의 정보(변명은 없습니다!) - Joel on Software
Hansel Minutes 에피소드 "Michael Kaplan과 함께하는 국제화 정리"
그리고 저는 이 글을 쓰던 중 Derek Sivers @ O'Reilly ONLamp 블로그의 매우 관련 있는 게시물을 발견했습니다. latin1의 MySQL 데이터를 utf8 utf-8로 변환
인덱스 길이 제한에 주의하세요.테이블이 구조화되어 있는 경우 다음과 같이 말합니다.
A Varchar (255) B Varchar (255) 키 ( 'A', 'B')
키 길이 제한이 1000바이트를 초과하게 됩니다.255+255는 괜찮지만 255*3 + 255*3은 작동하지 않습니다.
당신의
CHAR
그리고VARCHAR
열은 최대 3배 더 많은 디스크 공간을 사용합니다.
서수가 128보다 큰 latin-1로 가득 찬 경우에만 가능합니다.그렇지 않으면 UTF-8의 증가된 공간 사용이 최소화됩니다.
데이터 정렬이 항상 유리한 것은 아닙니다.항상 정확하지는 않은 움랏이 아닌 버전과 대조되는 움랏을 얻게 됩니다.utf8_bin을 사용하고 싶을 수도 있지만 모든 것이 대소문자를 구분합니다.