MySQL
문자 집합과 데이터 정렬
수색…
선언
CREATE TABLE foo ( ...
name CHARACTER SET utf8mb4
... );
연결
문자 세트를 사용하는 것이 가장 중요한 이유는 MySQL 서버에 클라이언트 바이트가 어떤 인코딩인지 알려주는 것입니다. 한 가지 방법이 있습니다.
SET NAMES utf8mb4;
각 언어 (PHP, Python, Java, ...)에는 고유 한 방식이 있으므로 대개 SET NAMES
좋습니다.
예를 들면 : SET NAMES utf8mb4
, 열 선언과 함께 CHARACTER SET latin1
-이 때 utf8mb4하기 위해 latin1에 변환됩니다 INSERTing
때 다시 변환 SELECTing
.
어떤 문자 세트 및 채우기입니까?
수천 개의 데이터 정렬이있는 수십 개의 문자 집합이 있습니다. (주어진 정렬은 하나의 문자 집합에만 속합니다.) SHOW COLLATION;
의 출력을보십시오 SHOW COLLATION;
.
중요한 CHARACTER SETs
는 대개 단 4 개입니다.
ascii -- basic 7-bit codes.
latin1 -- ascii, plus most characters needed for Western European languages.
utf8 -- the 1-, 2-, and 3-byte subset of utf8. This excludes Emoji and some of Chinese.
utf8mb4 -- the full set of UTF8 characters, covering all current languages.
모두 영어 문자를 포함하며 동일하게 인코딩됩니다. utf8은 utf8mb4의 하위 집합입니다.
우수 사례 ...
- utf8mb4를 다양한 언어를 사용할 수있는
TEXT
또는VARCHAR
열에 사용하십시오. - 16 진수 문자열 (UUID, MD5 등)과 간단한 코드 (country_code, postal_code 등)에 대해서는 ascii (latin1은 괜찮습니다)를 사용하십시오.
utf8mb4는 버전 5.5.3까지 존재하지 않았으므로 utf8은 그 전에 사용할 수있는 최상의 것이 었습니다.
MySQL 외의 "UTF8"은 MySQL의 utf8mb4가 아니라 MySQL의 utf8mb4와 동일한 것을 의미합니다.
데이터 정렬은 charset 이름으로 시작하고 대개 "case and accent insensitive"의 경우 _ci
로 _ci
"단순히 비트 비교의 경우" _bin
으로 끝납니다.
'최신'utf8mb4 데이터 정렬은 유니 코드 5.20을 기반으로하는 utf8mb4_unicode_520_ci
입니다. 단일 언어로 작업하는 경우 폴란드어 규칙에 따라 문자를 약간 재정렬하는 utf8mb4_polish_ci
원할 수 있습니다.
테이블 및 필드에 문자 세트 설정
CHARACTER SET
및 CHARSET
문을 사용하여 테이블 당뿐만 아니라 개별 필드마다 문자 세트를 설정할 수 있습니다.
CREATE TABLE Address (
`AddressID` INTEGER NOT NULL PRIMARY KEY,
`Street` VARCHAR(80) CHARACTER SET ASCII,
`City` VARCHAR(80),
`Country` VARCHAR(80) DEFAULT "United States",
`Active` BOOLEAN DEFAULT 1,
) Engine=InnoDB default charset=UTF8;
City
와 Country
는 UTF8
테이블의 기본 문자 세트로 설정하므로 UTF8
을 사용합니다. 다른 한편으로는 우리가 구체적으로 말했듯이 Street
는 ASCII
를 사용할 것입니다.
올바른 문자 집합을 설정하는 것은 데이터 집합에 크게 의존하지만 데이터로 작업하는 시스템 간의 이식성을 크게 향상시킬 수 있습니다.