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 )
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 latin1
conjunto de caracteres:
SHOW COLLATION LIKE 'latin1%';
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Conforme mencionado acima, cada conjunto de caracteres tem um agrupamento padrão, por exemplo, latin1_swedish_ci
é o agrupamento padrão do latin1
conjunto de caracteres.
Configurando conjuntos de caracteres e agrupamentos
O MySQL permite que você especifique conjuntos de caracteres e agrupamentos em quatro níveis:
- Servidor
- Base de dados
- Mesa
- Coluna
1) Definir conjuntos de caracteres e agrupamentos no nível do servidor
MySQL usa latin1
como 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_cs
o agrupamento para o servidor por meio da linha de comando:
>mysqld --character-set-server=utf8 --collation-server=utf8_unicode_cs
Linguagem 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 DATABASE
a 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 DATABASE
declaraçã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 TABLE
instruçã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
, VARCHAR
or TEXT
pode ter seu próprio conjunto de caracteres e agrupamento diferente do conjunto de caracteres e agrupamento da tabela.
A instrução CREATE TABLE
and ALTER TABLE
permite 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_name
Linguagem 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_ci
como 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 mydb
explicitamente o conjunto de caracteres e o agrupamento do banco de dados, ele mydb
não usará o conjunto de caracteres e o agrupamento padrão do servidor de banco de dados.
Segundo, crie uma nova tabela nomeada t1
no mydb
banco de dados:
USE mydb;
CREATE TABLE t1(
c1 char(25)
);
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta CREATE TABLE
instrução, não especificamos o conjunto de caracteres e o agrupamento da t1
tabela. Portanto, o MySQL usará o conjunto de caracteres e agrupamento do banco de dados para a t1
tabela. Neste caso, a t1
tabela terá utf8
como conjunto de caracteres padrão e utf8_unicode_ci
como agrupamento padrão.
Terceiro, altere o conjunto de caracteres e o agrupamento da tabela t1
para latin1
e latin1_german1_ci
:
ALTER TABLE t1
CHARACTER SET latin1
COLLATE latin1_german1_ci;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A c1
coluna da t1
tabela possui latin1
como conjunto de caracteres e latin1_german1_ci
como agrupamento.
Por fim, altere o conjunto de caracteres da c1
coluna para latin1
:
ALTER TABLE t1
MODIFY c1 VARCHAR(25)
CHARACTER SET latin1;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Agora, a c1
coluna tem o latin1
conjunto de caracteres, mas e o agrupamento? Está herdando o latin1_german1_ci
agrupamento do agrupamento da tabela?
A resposta é não. O motivo é que o agrupamento padrão do latin1
conjunto de caracteres é latin1_swedish_ci
, portanto, a c1
coluna terá o latin1_swedish_ci
agrupamento.
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
- https://dev.mysql.com/doc/refman/8.0/en/charset.html – Suporte ao conjunto de caracteres MySQL
- http://collation-charts.org/mysql60/ – Gráficos de agrupamento MySQL