my sql 의 문자 집합 과 검사 규칙 을 자세히 설명 합 니 다.
MySQL 에서 가장 흔히 볼 수 있 는 문자 집합 은 ASCII 문자 집합,latin 문자 집합,GB 2312 문자 집합,GBK 문자 집합,UTF 8 문자 집합 등 이 있 습 니 다.다음은 이 문자 집합 을 간단하게 소개 합 니 다.
ASCII 문자 집합
이 문자 집합 은 1 개의 바 이 트 를 사용 하여 인 코딩 을 합 니 다.한 바 이 트 는 8 자리 가 있 고 모두 128 개의 문 자 를 저장 할 수 있 습 니 다.구체 적 인 대응 관 계 는 다음 과 같 습 니 다.
라틴 문자 집합
latin 문자 집합 은 모두 256 개의 문 자 를 저장 할 수 있 습 니 다.ASCII 코드 에 비해 128 개의 서유럽 상용 문 자 를 포함 하고 있 습 니 다.
GB 2312 문자 집합
이 는 중국어 한자,라틴 문자,그리스 문자 등 을 포함 하 는데 그 중에서 한 자 는 대부분 6763 개,다른 문자 기 호 는 638 개 이 고 ASCII 문 자 를 호 환 한다.ASCII 인 코딩 을 할 때 1 개의 바이트,즉 128 비트 를 사용 합 니 다.다른 문 자 를 인 코딩 할 때 2 개의 바이트 로 인 코딩 합 니 다.그것 은 일종 의 변장 인 코딩 방식 이라는 것 을 이해 할 수 있다.
GBK 문자 집합
이 문자 집합 은 GB 2312 문자 집합 을 확장 하 는 것 으로 GB 2312 문자 집합 을 호 환 하 며 보통 두 바이트 로 인 코딩 합 니 다.
UTF 8 문자 집합
이 는 보통 1~4 개의 바이트 로 인 코딩 되 는데 사용 바이트 에 따라 UTF 8 과 utf8mb 4 두 가지 로 나 눌 수 있다.mb4 는 최대 4 개의 바이트 라 는 뜻 이다.일반적으로 UTF 8 은 3 개의 바이트 로 인 코딩 되 는데 그 밖 에 utf 16 과 utf 32,utf 16 은 2 개 또는 4 개의 바이트 로 한 문 자 를 인 코딩 하고 utf 32 는 4 개의 바이트 로 한 문 자 를 인 코딩 한다.
주의해 야 할 것 은 일부 이모 티 콘 표정 은 utf8mb 4 로 표시 해 야 한 다 는 점 이다.
2 my sql 에서 지원 하 는 문자 집합
MySQL 은 많은 문자 집합 을 지원 합 니 다.로 컬 문자 집합 을 예 로 들 어 show charset 를 사용 합 니 다.명령 은 현재 서버 가 지원 하 는 문자 집합 을 봅 니 다.결 과 는 다음 과 같 습 니 다.
[email protected]:(none) 22:46:48>>show charset;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+----------+-----------------------------+---------------------+--------+
39 rows in set (0.00 sec)
모두 39 개의 문자 집합 을 지원 하 는 것 을 볼 수 있 습 니 다.물론 버 전 마다 이 숫자 는 약간의 차이 가 있 습 니 다.이 39 개의 문자 집합 에서 우리 가 기억 해 야 할 것 은 주로 다음 과 같은 몇 가지 가 있다.
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci | 4 |
+----------+-----------------------------+---------------------+--------+
여기 서 우 리 는 잠시 그들의 최대 길이 가 몇 개의 바이트 만 포함 하고 있다 는 것 만 알 면 된다.3 검사 규칙
문자 집합 검사 규칙 은 문자 집합 이 크기 를 비교 할 때 근거 하 는 준칙 을 말한다.예 를 들 어 우리 가 a 와 B 의 크기 를 비교 하고 대소 문 자 를 고려 하지 않 으 면 aB,즉 같은 문자 집합,서로 다른 비교 규칙 은 특정한 열 데이터 에 대한 정렬 결과 도 달라 진다.
MySQL 의 문자 검사 규칙 은 show collation 을 통 해 사용 할 수 있 습 니 다.문법 을 살 펴 보면 다음 과 같다.
[email protected]:(none) 23:00:36>>show collation;
+-----------------------+----------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+-----------------------+----------+-----+---------+----------+---------+
| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 |
| big5_bin | big5 | 84 | | Yes | 1 |
| dec8_swedish_ci | dec8 | 3 | Yes | Yes | 1 |
| dec8_bin | dec8 | 69 | | Yes | 1 |
...........
| koi8r_general_ci | koi8r | 7 | Yes | Yes | 1 |
| koi8r_bin | koi8r | 74 | | Yes | 1 |
| latin1_german1_ci | latin1 | 5 | | Yes | 1 |
| koi8u_general_ci | koi8u | 22 | Yes | Yes | 1 |
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
+-----------------------+----------+-----+---------+----------+---------+
195 rows in set (0.00 sec)
우 리 는 결과 에 모두 195 개의 비교 규칙 이 있 음 을 알 수 있 습 니 다.그 중에서 모든 문자 집합 은 자신의 기본 적 인 검사 규칙 을 포함 하고 있 습 니 다.우 리 는 간단하게 설명 합 니 다:utf 8polish_ci 는 폴란드 어 를 규칙 으로 비교 합 니 다.이 검사 규칙 은 세 부분 으로 구성 되 어 있 습 니 다.비교 규칙 의 이름 은 관련 문자 집합 의 이름 으로 시작 합 니 다.utf 8 은 utf 8 문자 집합 의 비교 규칙 을 말 합 니 다.polish 는 폴란드 어 를 말 합 니 다.대소 문 자 를 구분 하지 않 는 다.맨 뒤의 접 두 사 를 대상 으로 우 리 는 다음 과 같이 요약 할 수 있다.
_ai 강세 구분 없 음
_as 강세 구분
_ci case insensitive(민감 하지 않 음) 대소 문자 구분 없 음
_cs 케이스 민감(민감) 대소 문자 구분
_bin 2 진법
위의 결과 에서 볼 수 있 듯 이 일부 검사 규칙 의 default 열 값 은 yes 입 니 다.이 검사 규칙 은 이 문자 집합 의 기본 검사 규칙 입 니 다.
4 서버 의 문자 집합 과 비교 규칙
my sql 은 서버 등급 의 문자 집합 과 비교 규칙 을 나타 내 는 두 개의 시스템 변 수 를 제공 합 니 다.하 나 는 character 입 니 다.set_sever,또 하 나 는 collationserver,기본 값 을 볼 수 있 습 니 다:
[email protected]:(none) 23:12:28>>show variables like 'character_set_server' ;
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| character_set_server | utf8 |
+----------------------+-------+
1 row in set (0.00 sec)
[email protected]:(none) 23:12:47>>show variables like 'collation_server';
+------------------+-----------------+
| Variable_name | Value |
+------------------+-----------------+
| collation_server | utf8_general_ci |
+------------------+-----------------+
1 row in set (0.00 sec)
[email protected]:(none) 23:12:57>>
my sql 에서 문자 집합 과 검증 규칙 은 4 개의 단계 로 나 뉘 는데 각각 서버 등급,데이터 베이스 등급,표 등급 과 필드 등급 입 니 다.여기 서 우 리 는 각각 예 를 들 어 보 겠 습 니 다.
mysql 23:23:48>>create database yyz character set utf8 collate utf8_general_ci ;
Query OK, 1 row affected (0.01 sec)
mysql 23:24:23>>create table yyz.yyz ( name varchar(10) ) charset gb2312 collate gb2312_chinese_ci;
Query OK, 0 rows affected (0.04 sec)
mysql 23:27:06>>
[email protected]:(none) 23:27:06>>alter table yyz.yyz add num varchar(10) charset gbk collate gbk_chinese_ci;
Query OK, 0 rows affected (0.11 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql 23:28:27>>show create table yyz.yyz;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+
| yyz | CREATE TABLE `yyz` (
`name` varchar(10) DEFAULT NULL,
`num` varchar(10) CHARACTER SET gbk DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=gb2312 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
문자 집합 과 비교 규칙 은 서로 관련 이 있 기 때문에 만약 에 우리 가 문자 집합 만 수정 하면 비교 규칙 도 달라 질 것 이다.비교 규칙 만 수정 하면 문자 집합 도 달라 질 것 이다.구체 적 인 규칙 은 다음 과 같다.문자 집합 만 수정 하면 비교 규칙 은 수 정 된 문자 집합 기본 비교 규칙 으로 변 합 니 다.
비교 규칙 만 수정 하면 문자 집합 은 수 정 된 비교 규칙 에 대응 하 는 문자 집합 으로 변 합 니 다.
그리고 다음 네 가 지 는 기억 해 야 한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 JSON 인덱싱 - aarondfrancis사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 말하지만 완전히 정확하지는 않습니다. MySQL로 JSON 열을 인덱싱하는 것은 완전히 가능합니다! 사람들은 종종 MySQL로 JSON을 인덱싱할 수 없다고 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.