Agrupamento MySQL

Resumo : neste tutorial, você aprenderá sobre agrupamento MySQL e como definir conjuntos de caracteres e agrupamentos para o servidor MySQL, banco de dados, tabela e coluna.

Introdução ao agrupamento MySQL

Um agrupamento MySQL é um conjunto de regras usadas para comparar caracteres em um conjunto de caracteres específico . Cada conjunto de caracteres no MySQL possui pelo menos um agrupamento padrão. Pode ter mais de um agrupamento. No entanto, dois conjuntos de caracteres não podem ter o mesmo agrupamento.

O MySQL fornece a SHOW CHARACTER SET  instrução que permite obter os agrupamentos padrão de conjuntos de caracteres:

SHOW CHARACTER SET;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Conjuntos de caracteres MySQL

Os valores da coluna de ordenação padrão especificam as ordenações padrão para os conjuntos de caracteres.

Por convenção, um agrupamento para um conjunto de caracteres começa com o nome do conjunto de caracteres e termina com _ci(sem distinção entre maiúsculas e minúsculas) _cs  (diferencia maiúsculas de minúsculas) ou _bin  (binário).

Para obter todos os agrupamentos de um determinado conjunto de caracteres, use a SHOW COLLATION  instrução a seguir:

SHOW COLLATION LIKE 'character_set_name%';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Por exemplo, a instrução a seguir obtém todos os agrupamentos do latin1conjunto de caracteres:

SHOW COLLATION LIKE 'latin1%';Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )
Agrupamento MySQL

Conforme mencionado acima, cada conjunto de caracteres tem um agrupamento padrão, por exemplo, latin1_swedish_cié o agrupamento padrão do latin1conjunto de caracteres.

Configurando conjuntos de caracteres e agrupamentos

O MySQL permite que você especifique conjuntos de caracteres e agrupamentos em quatro níveis:

  1. Servidor
  2. Base de dados
  3. Mesa
  4. Coluna

1) Definir conjuntos de caracteres e agrupamentos no nível do servidor

MySQL usa latin1como conjunto de caracteres padrão. Portanto, o agrupamento padrão é latin1_swedish_ci. Você pode alterar essas configurações na inicialização do servidor.

Se você especificar um conjunto de caracteres na inicialização do servidor, o MySQL usará o agrupamento padrão desse conjunto de caracteres. No entanto, se você especificar explicitamente um conjunto de caracteres e um agrupamento, o MySQL usará o conjunto de caracteres e o agrupamento para todos os bancos de dados que você criar.

A instrução a seguir define o conjunto de caracteres utf8 e utf8_unicode_cso agrupamento para o servidor por meio da linha de comando:

>mysqld --character-set-server=utf8 --collation-server=utf8_unicode_csLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

2) Definir conjuntos de caracteres e agrupamentos no nível do banco de dados

Quando você cria um banco de dados, mas não especifica o conjunto de caracteres e o agrupamento, o MySQL usará o conjunto de caracteres e o agrupamento padrão do servidor para o novo banco de dados.

Você pode substituir as configurações padrão no nível do banco de dados usando CREATE DATABASEa instrução:

CREATE DATABASE database_name
CHARACTER SET character_set_name
COLLATE collation_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

ou usando a ALTER DATABASEdeclaração:

ALTER DATABASE database_name
CHARACTER SET character_set_name
COLLATE collation_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

O MySQL usará o conjunto de caracteres e agrupamento do banco de dados por padrão para as tabelas que você criar no banco de dados.

3) Definir conjuntos de caracteres e agrupamentos no nível da tabela

Um banco de dados pode conter tabelas com conjuntos de caracteres e ordenações diferentes do conjunto de caracteres e ordenação do banco de dados.

Você pode especificar o conjunto de caracteres padrão e a ordenação de uma tabela ao criá-la usando a CREATE TABLEinstrução:

CREATE TABLE table_name(
   ...
)
CHARACTER SET character_set_name
COLLATE collation_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

ou quando você altera a tabela usando a ALTER TABLE  instrução:

ALTER TABLE table_name(
  ...
)
CHARACTER SET character_set_name
COLLATE collation_name;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

4) Definir conjunto de caracteres e agrupamento no nível da coluna

Uma coluna do tipo CHAR, VARCHARor TEXTpode ter seu próprio conjunto de caracteres e agrupamento diferente do conjunto de caracteres e agrupamento da tabela.

A instrução CREATE TABLEand ALTER TABLEpermite substituir o conjunto de caracteres e o agrupamento de uma coluna específica:

column_name [CHAR | VARCHAR | TEXT] (length)
CHARACTER SET character_set_name
COLLATE collation_nameLinguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

As regras para definir o conjunto de caracteres e agrupamento são:

  • Se você especificar explicitamente um conjunto de caracteres e um agrupamento, o conjunto de caracteres e o agrupamento serão usados.
  • Se você especificar um conjunto de caracteres e omitir o agrupamento, o agrupamento padrão do conjunto de caracteres será usado.
  • Se você especificar um agrupamento sem um conjunto de caracteres, o conjunto de caracteres associado ao agrupamento será usado.
  • Se você omitir o conjunto de caracteres e o agrupamento, o conjunto de caracteres e o agrupamento padrão serão usados.

Vamos dar uma olhada em alguns exemplos de configuração de conjuntos de caracteres e agrupamentos.

Exemplos de configuração de conjuntos de caracteres e agrupamentos

Primeiro, crie um novo banco de dados com utf8 como conjunto de caracteres e utf8_unicode_cicomo agrupamento padrão:

CREATE DATABASE mydb
CHARACTER SET utf8
COLLATE utf8_unicode_ci;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Como especificamos mydbexplicitamente o conjunto de caracteres e o agrupamento do banco de dados, ele mydbnão usará o conjunto de caracteres e o agrupamento padrão do servidor de banco de dados.

Segundo, crie uma nova tabela nomeada t1no mydbbanco de dados:

USE mydb;
 
CREATE TABLE t1(
    c1 char(25)
);Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Nesta CREATE TABLEinstrução, não especificamos o conjunto de caracteres e o agrupamento da t1tabela. Portanto, o MySQL usará o conjunto de caracteres e agrupamento do banco de dados para a t1tabela. Neste caso, a t1  tabela terá utf8como conjunto de caracteres padrão e utf8_unicode_cicomo agrupamento padrão.

Terceiro, altere o conjunto de caracteres e o agrupamento da tabela t1para latin1e latin1_german1_ci:

ALTER TABLE t1
CHARACTER SET latin1
COLLATE latin1_german1_ci;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

A c1coluna da t1tabela possui latin1como conjunto de caracteres e latin1_german1_cicomo agrupamento.

Por fim, altere o conjunto de caracteres da c1coluna para latin1:

ALTER TABLE t1
MODIFY c1 VARCHAR(25)
CHARACTER SET latin1;Linguagem de código:  SQL (linguagem de consulta estruturada)  ( sql )

Agora, a c1coluna tem o  latin1  conjunto de caracteres, mas e o agrupamento? Está herdando o latin1_german1_ciagrupamento do agrupamento da tabela?

A resposta é não. O motivo é que o agrupamento padrão do latin1conjunto de caracteres é latin1_swedish_ci, portanto, a c1coluna terá o  latin1_swedish_ciagrupamento.

Neste tutorial, você aprendeu sobre agrupamento MySQL e como especificar conjuntos de caracteres e agrupamentos para o servidor MySQL, bancos de dados, tabelas e colunas.

Referência

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *