my sql 의 문자 집합 과 검사 규칙 을 자세히 설명 합 니 다.

1.몇 가지 일반적인 문자 집합
     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)
  문자 집합 과 비교 규칙 은 서로 관련 이 있 기 때문에 만약 에 우리 가 문자 집합 만 수정 하면 비교 규칙 도 달라 질 것 이다.비교 규칙 만 수정 하면 문자 집합 도 달라 질 것 이다.구체 적 인 규칙 은 다음 과 같다.
문자 집합 만 수정 하면 비교 규칙 은 수 정 된 문자 집합 기본 비교 규칙 으로 변 합 니 다.
비교 규칙 만 수정 하면 문자 집합 은 수 정 된 비교 규칙 에 대응 하 는 문자 집합 으로 변 합 니 다.
그리고 다음 네 가 지 는 기억 해 야 한다.
  •     데이터베이스 의 경우 데이터 베 이 스 를 만 들 고 수정 하 는 문구 에 치 명 적 인 문자 집합 과 비교 규칙 이 없 으 면 서버 등급 의 문자 집합 과 비교 규칙 을 데이터베이스 의 문자 집합 과 비교 규칙 으로 사용 합 니 다
  •     어떤 표 에 있어 서 표를 만 들 고 수정 하 는 문구 에 문자 집합 과 비교 규칙 이 명시 되 어 있 지 않 으 면 이 표 가 있 는 데이터 뱅 크 의 문자 집합 과 비교 규칙 을 이 표 의 문자 집합 과 비교 규칙 으로 사용 합 니 다
  •     어떤 열 에 있어 서,만 들 고 수정 한 문장 에 문자 집합 과 비교 규칙 이 명시 되 어 있 지 않 으 면,이 열 이 있 는 표 의 문자 집합 과 비교 규칙 을 이 열의 문자 집합 과 비교 규칙 으로 사용 합 니 다
  •     문자열 을 저장 하 는 열 에 대해 같은 표 의 다른 열 에 도 서로 다른 문자 집합 과 비교 규칙 이 있 을 수 있 습 니 다
  • 이상 은 my sql 의 문자 집합 과 검사 규칙 에 대한 상세 한 내용 입 니 다.my sql 의 문자 집합 과 검사 규칙 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!

    좋은 웹페이지 즐겨찾기