Explicação detalhada do conjunto de caracteres e regras de agrupamento do MySQL e conjunto de caracteres de visualização e regras de agrupamento do MySQL

Explicação detalhada do conjunto de caracteres e regras de agrupamento do MySQL

Antes de explicar os conjuntos de caracteres e as regras de revisão, vamos dar uma breve olhada nos caracteres, conjuntos de caracteres e codificações de caracteres.

Caractere (Caracter) é o nome coletivo de letras, números e símbolos em computadores. Um caractere pode ser um caractere chinês, uma letra inglesa, um algarismo arábico, um sinal de pontuação, etc.

Os computadores armazenam dados em formato binário. Os números, inglês, sinais de pontuação, caracteres chineses e outros caracteres que normalmente vemos no display são o resultado da conversão de números binários.

Conjunto de caracteres (Conjunto de caracteres) define a correspondência entre caracteres e binários e atribui números exclusivos aos caracteres. Conjuntos de caracteres comuns incluem ASCII, GBK, IOS-8859-1, etc.

A codificação de caracteres (codificação de caracteres) também pode ser chamada de código de conjunto de caracteres, que especifica como armazenar números de caracteres no computador.

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

 As regras de agrupamento também podem ser chamadas de regras de agrupamento, que se referem a regras de comparação entre caracteres no mesmo conjunto de caracteres. Há um relacionamento um-para-muitos entre conjuntos de caracteres e regras de agrupamento, e cada conjunto de caracteres possui uma regra de agrupamento padrão. Conjuntos de caracteres e regras de ordenação complementam-se e são interdependentes.

Simplificando, conjuntos de caracteres são usados ​​para definir como o MySQL armazena strings, e regras de agrupamento são usadas para definir como o MySQL compara strings.

Amigos que desejam saber sobre conjuntos de caracteres ASCII, GB2312, GBK e Unicode podem clicar no link a seguir para ler e aprender:

Alguns bancos de dados não distinguem claramente entre conjuntos de caracteres e regras de ordenação. Por exemplo, ao criar um banco de dados no SQL Server, selecionar um conjunto de caracteres equivale a selecionar um conjunto de caracteres e regras de agrupamento.

No MySQL, o conjunto de caracteres e as regras de agrupamento são separados, e o conjunto de caracteres e as regras de agrupamento devem ser definidos. Em circunstâncias normais, não há nenhum requisito especial, basta definir um deles. Quando apenas o conjunto de caracteres for definido, o MySQL definirá as regras de agrupamento para as regras de agrupamento padrão correspondentes no conjunto de caracteres.

Dachang engenheiro de banco de dados sênior treinamento prático de banco de dados mysql icon-default.png?t=N7T8https://edu.csdn.net/course/detail/39021

Você podeSHOW VARIABLES LIKE 'character%';verificar o conjunto de caracteres atualmente usado pelo MySQL por meio do comando. O comando e os resultados da execução são os seguintes:

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)

 Os resultados de execução acima são explicados na tabela a seguir:

nome ilustrar
conjunto_de_caracteres_cliente Conjunto de caracteres usado pelo cliente MySQL
conjunto_de_personagens_conexão Conjunto de caracteres usado ao conectar ao banco de dados
conjunto_de_caracteres_banco de dados Crie o conjunto de caracteres usado pelo banco de dados
conjunto_de_caracteres_sistema de arquivos O conjunto de caracteres usado pelo sistema de arquivos do servidor MySQL. O valor padrão é binário sem qualquer conversão.
conjunto_de_caracteres_resultados O conjunto de caracteres usado pelo banco de dados ao retornar dados ao cliente
conjunto_de_caracteres_servidor Recomenda-se que o conjunto de caracteres utilizado pelo servidor MySQL seja gerenciado pelo próprio sistema e não definido manualmente.
conjunto_de_caracteres_sistema O conjunto de caracteres utilizado pelo sistema de base de dados.O valor padrão é utf8 e não precisa de ser definido.
character_sets_dir Diretório de instalação do conjunto de caracteres

Quando ocorrem caracteres ilegíveis, você não precisa se preocupar com as três variáveis ​​do sistema character_set_filesystem, character_set_system e character_sets_dir, pois elas não afetarão os caracteres ilegíveis.

SHOW VARIABLES LIKE 'collation\_%';Você pode visualizar as regras de agrupamento atuais usadas pelo MySQL por meio de comandos. Os comandos e resultados de execução são os seguintes:

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)

 Os resultados da operação acima são explicados a seguir:

  • collation_connection: regras de agrupamento usadas ao conectar-se ao banco de dados
  • collation_database: regras de agrupamento usadas ao criar o banco de dados
  • collation_server: Regras de agrupamento usadas pelo servidor MySQL


As regras e comandos de revisão são os seguintes:

  • Começa com o nome do conjunto de caracteres correspondente à regra de ordenação
  • Centralize o nome do país (ou centralize-o com geral)
  • Terminando com ci, cs ou bin, ci significa que não diferencia maiúsculas de minúsculas, cs significa que diferencia maiúsculas de minúsculas e bin significa comparação por valor codificado binário.

Processo de conversão de conjunto de caracteres MySQL

O processo de conversão de conjuntos de caracteres no MySQL é o seguinte:

1) Ao executar comandos MySQL ou instruções SQL na janela do prompt de comando (linha de comando cmd), esses comandos ou instruções são convertidos do "conjunto de caracteres da janela do prompt de comando" para aqueles definido pelo conjunto de caracteres "character_set_client".

2) Após a conexão bem-sucedida ao servidor MySQL usando a janela do prompt de comando, um "link de comunicação de dados" é estabelecido. Os comandos MySQL ou instruções sql são transmitidos ao servidor MySQL através do "link de dados", e o conjunto de caracteres definido por character_set_client é convertido em character_set_connection Conjunto de caracteres definido.

3) Depois que a instância de serviço MySQL recebe o comando MySQL ou instrução sql no link de comunicação de dados, ela converte o comando MySQL ou instrução sql do conjunto de caracteres definido por character_set_connection para o conjunto de caracteres definido por character_set_server.

4) Se o comando MySQL ou instrução sql operar em um determinado banco de dados, converta o comando MySQL ou instrução sql do conjunto de caracteres definido por character_set_server para o conjunto de caracteres definido por character_set_database.

5) Após a execução do comando MySQL ou instrução sql, o resultado da execução é definido para o conjunto de caracteres definido por character_set_results.

6) Os resultados da execução são retornados ao longo do caminho original do link de comunicação de dados aberto e os resultados da execução são convertidos do conjunto de caracteres definido por character_set_results para o conjunto de caracteres definido por character_set_client e, finalmente, convertidos no conjunto de caracteres da janela do prompt de comando e exibido na janela do prompt de comando.

 

Prática completa de habilidades básicas de banco de dados MySQL icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Conjunto de caracteres de visualização do MySQL e regras de agrupamento

Na seção " Explicação detalhada do conjunto de caracteres e regras de agrupamento do MySQL ", aprendemos sobre o conjunto de caracteres e regras de agrupamento do MySQL. Esta seção apresenta principalmente vários métodos para visualizar o conjunto de caracteres e as regras de agrupamento.

No MySQL, o comando e o processo de execução para visualizar os conjuntos de caracteres disponíveis são os seguintes: 

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)

em:

  • A primeira coluna (Charset) é o nome do conjunto de caracteres;
  • A segunda coluna (Descrição) é a descrição do conjunto de caracteres;
  • A terceira coluna (agrupamento padrão) é a regra de agrupamento padrão do conjunto de caracteres;
  • A quarta coluna (Maxlen) indica o número máximo de bytes ocupados por um caractere no conjunto de caracteres.


Os conjuntos de caracteres comumente usados ​​são os seguintes:

  • latin1 suporta caracteres da Europa Ocidental, caracteres gregos, etc.
  • gbk suporta caracteres chineses simplificados.
  • big5 suporta caracteres chineses tradicionais.
  • utf8 suporta caracteres de quase todos os países.

Prática completa de habilidades básicas de banco de dados MySQL icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210
Você também pode verificar os conjuntos de caracteres suportados pelo MySQL consultando os registros na tabela information_schema.character_set. A instrução SQL e o processo de execução são os seguintes:

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 |
......

Você pode usar  SHOW COLLATION LIKE '***';comandos para visualizar as regras de agrupamento de conjuntos de caracteres relacionados.

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)

O resultado da execução acima é a regra de agrupamento correspondente ao conjunto de caracteres GBK, entre os quais gbk_chinese_ci é a regra de agrupamento padrão e não diferencia maiúsculas de minúsculas. gbk_bin compara com base em valores codificados binários e diferencia maiúsculas de minúsculas.

Você também pode visualizar as regras de agrupamento disponíveis no MySQL consultando os registros na tabela information_schema.COLLATIONS. A instrução SQL e o processo de execução são os seguintes:

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 |
......
Exemplo 1

Especifique "A" e "a" para comparar de acordo com as regras de ordenação gbk_chinese_ci e gbk_bin respectivamente. As instruções SQL e os resultados da execução são os seguintes:

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)

Como as regras de agrupamento gbk_chinese_ci ignoram maiúsculas e minúsculas, os dois "A" e "a" são considerados iguais. A regra de agrupamento gbk_bin não ignora maiúsculas e minúsculas e os dois caracteres são considerados diferentes.

Em aplicativos reais, devemos confirmar antecipadamente como o aplicativo precisa ser classificado, se faz distinção entre maiúsculas e minúsculas e, em seguida, selecionar as regras de revisão correspondentes.

Prática completa de habilidades básicas de banco de dados MySQL icon-default.png?t=N7T8https://edu.csdn.net/course/detail/36210

Acho que você gosta

Origin blog.csdn.net/m0_37449634/article/details/135554392
Recomendado
Clasificación