MySQL 문자 집합 및 대조 규칙과 MySQL 보기 문자 집합 및 대조 규칙에 대한 자세한 설명

MySQL 문자 집합 및 대조 규칙에 대한 자세한 설명

문자 집합과 교정 규칙을 설명하기 전에 문자, 문자 집합 및 문자 인코딩에 대해 간략하게 살펴보겠습니다.

문자(Character)란 컴퓨터에 사용되는 문자, 숫자, 기호의 총칭으로, 한자, 영문자, 아라비아숫자, 구두점 등이 될 수 있다.

컴퓨터는 데이터를 이진 형식으로 저장합니다. 우리가 일반적으로 디스플레이에 표시되는 숫자, 영어, 구두점, 한자 및 기타 문자는 이진수 변환의 결과입니다.

문자 집합(Character set)은 문자와 바이너리 간의 대응관계를 정의하고, 문자에 고유한 번호를 부여하는 것입니다. 일반적인 문자 집합에는 ASCII, GBK, IOS-8859-1 등이 포함됩니다.

문자 인코딩(Character Encoding)은 컴퓨터에 문자 번호를 저장하는 방법을 지정하는 문자 세트 코드라고도 합니다.

大部分字符集都只对应一种字符编码,例如:ASCII、IOS-8859-1、GB2312、GBK,都是既表示了字符集又表示了对应的字符编码。所以一般情况下,可以将两者视为同义词。Unicode 字符集除外,Unicode 有三种编码方案,即 UTF-8、UTF-16 和 UTF-32。最为常用的是 UTF-8 编码。

 대조 규칙은 동일한 문자 집합에 있는 문자 간의 비교 규칙을 참조하는 대조 규칙이라고도 합니다. 문자 세트와 대조 규칙 사이에는 일대다 관계가 있으며, 각 문자 세트에는 기본 대조 규칙이 있습니다. 문자 세트와 조합 규칙은 서로를 보완하며 상호 의존적입니다.

간단히 말해서, 문자 집합은 MySQL이 문자열을 저장하는 방법을 정의하는 데 사용되고, 대조 규칙은 MySQL이 문자열을 비교하는 방법을 정의하는 데 사용됩니다.

ASCII, GB2312, GBK 및 유니코드 문자 집합에 대해 알고 싶은 친구는 다음 링크를 클릭하여 읽고 배울 수 있습니다.

일부 데이터베이스에서는 문자 집합과 대조 규칙을 명확하게 구분하지 않습니다. 예를 들어 SQL Server에서 데이터베이스를 생성할 때 문자 집합을 선택하는 것은 문자 집합 및 조합 규칙을 선택하는 것과 같습니다.

MySQL에서는 문자셋과 콜레이션 규칙이 분리되어 있으며, 문자셋과 콜레이션 규칙을 반드시 설정해야 한다. 일반적인 상황에서는 특별한 요구 사항이 없으며 그 중 하나만 설정하면 됩니다. 문자 세트만 설정된 경우 MySQL은 문자 세트의 해당 기본 콜레이션 규칙으로 대조 규칙을 설정합니다.

다창 수석 데이터베이스 엔지니어 mysql 데이터베이스 실습 icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

명령어를 통해 현재 MySQL에서 사용하고 있는 캐릭터 셋을 확인할 수 있으며SHOW VARIABLES LIKE 'character%';, 명령어와 실행 결과는 다음과 같습니다.

mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | gbk                                                     |
| character_set_connection | gbk                                                     |
| character_set_database   | latin1                                                  |
| character_set_filesystem | binary                                                  |
| character_set_results    | gbk                                                     |
| character_set_server     | latin1                                                  |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\ |
+--------------------------+---------------------------------------------------------+
8 rows in set, 1 warning (0.01 sec)

 위의 실행 결과는 다음 표에 설명되어 있습니다.

이름 설명하다
캐릭터_세트_클라이언트 MySQL 클라이언트에서 사용하는 문자 세트
캐릭터세트_연결 데이터베이스에 연결할 때 사용되는 문자 집합
캐릭터_세트_데이터베이스 데이터베이스에서 사용되는 문자 집합을 만듭니다.
char_set_filesystem MySQL 서버 파일 시스템에서 사용하는 문자 집합입니다. 기본값은 변환 없는 바이너리입니다.
문자_세트_결과 클라이언트에 데이터를 반환할 때 데이터베이스에서 사용하는 문자 집합
캐릭터세트_서버 MySQL 서버에서 사용하는 캐릭터 셋은 수동으로 정의하지 않고 시스템 자체에서 관리하는 것을 권장합니다.
캐릭터세트_시스템 데이터베이스 시스템에서 사용하는 문자셋으로, 기본값은 utf8이므로 따로 설정할 필요가 없다.
문자세트_디렉터리 문자셋 설치 디렉터리

잘못된 문자가 발생하는 경우 세 가지 시스템 변수인 Character_set_filesystem, Character_set_system 및 Character_sets_dir은 잘못된 문자에 영향을 주지 않으므로 신경 쓸 필요가 없습니다.

SHOW VARIABLES LIKE 'collation\_%';현재 MySQL에서 사용하고 있는 데이터 정렬 규칙을 명령어를 통해 확인할 수 있으며, 명령어와 실행 결과는 다음과 같습니다.

mysql> SHOW VARIABLES LIKE 'collation\_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | gbk_chinese_ci    |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set, 1 warning (0.01 sec)

 위의 연산 결과를 설명하면 다음과 같습니다.

  • collation_connection: 데이터베이스에 연결할 때 사용되는 대조 규칙
  • collation_database: 데이터베이스 생성 시 사용되는 대조 규칙
  • collation_server: MySQL 서버에서 사용하는 데이터 정렬 규칙


교정 규칙 및 명령은 다음과 같습니다.

  • 대조 규칙에 해당하는 문자 세트 이름으로 시작합니다.
  • 국가 이름을 중앙에 배치합니다(또는 일반을 중앙에 배치).
  • ci, cs 또는 bin으로 끝나는 ci는 대소문자를 구분하지 않음을 의미하고, cs는 대소문자를 구분함을 의미하며, bin은 이진 코드 값으로 비교를 의미합니다.

MySQL 문자 집합 변환 프로세스

MySQL에서 문자 집합의 변환 과정은 다음과 같습니다.

1) 명령 프롬프트 창(cmd 명령줄)에서 MySQL 명령이나 sql 문을 실행할 때 이러한 명령이나 명령문은 "명령 프롬프트 창 문자 집합"에서 해당 명령이나 명령문으로 변환됩니다. "character_set_client" 문자 세트로 정의됩니다.

2) 명령 프롬프트 창을 이용하여 MySQL 서버에 성공적으로 접속한 후 "데이터 통신 링크"가 성립되고, "데이터 링크"를 따라 MySQL 명령이나 sql 문이 MySQL 서버로 전송되며, Character_set_client에서 정의한 캐릭터 셋은 다음과 같다. Character_set_connection으로 변환됨 정의된 문자 집합입니다.

3) MySQL 서비스 인스턴스는 데이터 통신 링크에서 MySQL 명령 또는 sql 문을 수신한 후, MySQL 명령 또는 sql 문을 Character_set_connection에서 정의한 문자 집합에서 Character_set_server에서 정의한 문자 집합으로 변환합니다.

4) MySQL 명령이나 sql 문이 특정 데이터베이스에서 동작하는 경우, MySQL 명령이나 sql 문을 Character_set_server에 정의된 문자 집합에서 Character_set_database에 정의된 문자 집합으로 변환합니다.

5) MySQL 명령이나 sql 문이 실행된 후 실행 결과는 Character_set_results에서 정의한 문자 집합으로 설정됩니다.

6) 실행 결과는 열린 데이터 통신 링크의 원래 경로를 따라 반환되며, 실행 결과는 Character_set_results에서 정의한 문자 집합에서 Character_set_client에서 정의한 문자 집합으로 변환된 후 최종적으로 명령 프롬프트 창 문자 집합으로 변환되어 명령 프롬프트 창에 표시됩니다. .

 

MySQL 데이터베이스 기본 스킬 전체 실습 icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210 See More

MySQL 보기 문자 집합 및 대조 규칙

" MySQL 문자 집합 및 대조 규칙 세부 설명 " 섹션에서는 MySQL 문자 집합 및 대조 규칙에 대해 알아보았습니다. 이 절에서는 주로 문자 집합 및 대조 규칙을 보는 여러 가지 방법을 소개합니다.

MySQL에서 사용 가능한 문자 집합을 보기 위한 명령 및 실행 프로세스는 다음과 같습니다. 

mysql> SHOW CHARACTER set;
+----------+---------------------------------+---------------------+--------+
| 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 |
| utf16le  | UTF-16LE Unicode                | utf16le_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 |
| gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |
+----------+---------------------------------+---------------------+--------+
41 rows in set (0.02 sec)

안에:

  • 첫 번째 열(Charset)은 문자 집합 이름입니다.
  • 두 번째 열(설명)은 문자 집합 설명입니다.
  • 세 번째 열(기본 데이터 정렬)은 문자 집합의 기본 데이터 정렬 규칙입니다.
  • 네 번째 열(Maxlen)은 문자 집합에서 문자가 차지하는 최대 바이트 수를 나타냅니다.


일반적으로 사용되는 문자 집합은 다음과 같습니다.

  • latin1은 서유럽 문자, 그리스 문자 등을 지원합니다.
  • gbk는 중국어 간체 문자를 지원합니다.
  • big5는 중국어 번체 문자를 지원합니다.
  • utf8은 거의 모든 국가의 문자를 지원합니다.

MySQL 데이터베이스 기초 스킬 전체 실습 icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
information_schema.character_set 테이블의 레코드를 쿼리하여 MySQL에서 지원하는 문자 집합을 확인할 수도 있습니다. SQL 문과 실행 과정은 다음과 같습니다.

mysql> SELECT * FROM information_schema.character_sets;
+--------------------+----------------------+---------------------------------+--------+
| CHARACTER_SET_NAME | DEFAULT_COLLATE_NAME | DESCRIPTION                     | MAXLEN |
+--------------------+----------------------+---------------------------------+--------+
| big5               | big5_chinese_ci      | Big5 Traditional Chinese        |      2 |
| dec8               | dec8_swedish_ci      | DEC West European               |      1 |
| cp850              | cp850_general_ci     | DOS West European               |      1 |
| hp8                | hp8_english_ci       | HP West European                |      1 |
......

SHOW COLLATION LIKE '***';명령을 사용하여 관련 문자 집합의 조합 규칙을 볼 수  있습니다.

mysql> SHOW COLLATION LIKE 'gbk%';
+----------------+---------+----+---------+----------+---------+
| Collation      | Charset | Id | Default | Compiled | Sortlen |
+----------------+---------+----+---------+----------+---------+
| gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 |
| gbk_bin        | gbk     | 87 |         | Yes      |       1 |
+----------------+---------+----+---------+----------+---------+
2 rows in set (0.00 sec)

위의 실행 결과는 GBK 문자 집합에 해당하는 대조 규칙이며, 그 중 gbk_chinese_ci가 기본 대조 규칙이며 대소문자를 구분하지 않습니다. gbk_bin은 바이너리 코딩된 값을 기준으로 비교하며 대소문자를 구분합니다.

information_schema.COLLATIONS 테이블의 레코드를 쿼리하여 MySQL에서 사용할 수 있는 데이터 정렬 규칙을 볼 수도 있습니다. SQL 문과 실행 과정은 다음과 같습니다.

mysql> SELECT * FROM information_schema.COLLATIONS;
+--------------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME           | CHARACTER_SET_NAME | ID  | IS_DEFAULT | IS_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 |
| cp850_general_ci         | cp850              |   4 | Yes        | Yes         |       1 |
| cp850_bin                | cp850              |  80 |            | Yes         |       1 |
......
예 1

gbk_chinese_ci 및 gbk_bin 데이터 정렬 규칙에 따라 각각 비교할 "A" 및 "a"를 지정합니다. SQL 문과 실행 결과는 다음과 같습니다.

mysql> SELECT CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
    -> else 0 end;
+-------------------------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_chinese_ci = 'a' COLLATE gbk_chinese_ci then 1
else 0 end |
+-------------------------------------------------------------------------------------+
|                                                                                   1 |
+-------------------------------------------------------------------------------------+
1 row in set (0.02 sec)

mysql> SELECT CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
    -> else 0 end;
+-----------------------------------------------------------------------+
| CASE WHEN 'A' COLLATE gbk_bin = 'a' COLLATE gbk_bin then 1
else 0 end |
+-----------------------------------------------------------------------+
|                                                                     0 |
+-----------------------------------------------------------------------+
1 row in set (0.00 sec)

gbk_chinese_ci 대조 규칙은 대소문자를 무시하므로 두 "A"와 "a"는 동일한 것으로 간주됩니다. gbk_bin 대조 규칙은 대소문자를 무시하지 않으며 두 문자는 서로 다른 것으로 간주됩니다.

실제 응용 프로그램에서는 응용 프로그램을 어떻게 정렬해야 하는지, 대소문자 구분 여부를 미리 확인한 다음 해당 교정 규칙을 선택해야 합니다.

MySQL 데이터베이스 기본 스킬 전체 실습 icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210 See More

추천

출처blog.csdn.net/m0_37449634/article/details/135554392