No MySQL, o agrupamento pode ser aplicado em vários níveis. Ele pode ser aplicado no nível do servidor, no nível da conexão, no nível do banco de dados, no nível da tabela e até mesmo no nível da coluna. Você também pode especificar uma ordenação em suas consultas que substituirá qualquer ordenação aplicada nos níveis de banco de dados, tabela ou coluna.
Veja como descobrir qual agrupamento está sendo aplicado em cada um desses níveis.
Atalho para conexão, servidor e agrupamento de banco de dados
A maneira mais rápida de obter informações de agrupamento da conexão, do servidor e do banco de dados é usar a instrução a seguir. Esta instrução retorna todas as variáveis do sistema começando com
collation
:MOSTRAR VARIÁVEIS COMO 'collation%';
Isso retorna o agrupamento para o servidor, conexão e banco de dados. Assim:
+-----------------------+--------------------+| Nome_variável | Valor |+-----------------------+--------------------+| collation_connection | utf8mb4_0900_ai_ci || banco de dados_collation | utf8_general_ci || servidor_collation | utf8mb4_0900_ai_ci |+---------------------------------+--------------------+
Você também pode retornar cada uma dessas variáveis do sistema separadamente, se necessário. Veja abaixo as instruções sobre como fazer isso.
Agrupamento em nível de servidor
A execução do comando a seguir retorna o agrupamento padrão do servidor.
SELECT @@collation_server;
Exemplo de resultado:
+--------------------+| @@collation_server |+--------------------+| utf8mb4_0900_ai_ci |+--------------------+
Agrupamento em nível de conexão
Quando você executa uma consulta em um banco de dados MySQL, o MySQL usa várias variáveis do sistema para determinar qual conjunto de caracteres e agrupamento usar sempre que as consultas forem executadas. Se o cliente usa um conjunto de caracteres diferente para o servidor, o MySQL pode traduzi-lo em um conjunto de caracteres e agrupamento apropriados.
Ao enviar os resultados da consulta de volta ao cliente, o MySQL pode traduzir esses resultados de volta para um conjunto de caracteres diferente, se necessário. O MySQL usa variáveis de sistema para determinar quais conjuntos de caracteres e agrupamentos devem ser usados em cada uma dessas etapas.
O seguinte destaca o agrupamento de conexão (você pode usar a mesma sintaxe para qualquer uma das variáveis do sistema):
SELECT @@collation_connection;
Exemplo de resultado:
+------------------------+| @@collation_connection |+------------------------+| utf8mb4_0900_ai_ci |+------------------------+
Você também pode retornar todas as variáveis de sistema do conjunto de caracteres com a seguinte consulta:
MOSTRAR VARIÁVEIS COMO 'character_set%';
Exemplo de resultado:
+--------------------------+------------------- ---------------+| Nome_variável | Valor |+--------------------------+-------------------- --------------+| character_set_client | utf8mb4 || character_set_connection | utf8mb4 || character_set_database | utf8 || character_set_filesystem | binário || character_set_results | utf8mb4 || character_set_server | utf8mb4 || character_set_system | utf8 || character_sets_dir | /usr/local/mysql/share/charsets/ |+--------------------------+---------- ------------------------+
Agrupamento em nível de banco de dados
A instrução a seguir pode ser usada para verificar o agrupamento de um determinado banco de dados:
USE Music;SELECT @@character_set_database, @@collation_database;
Exemplo de resultado:
+--------------------------+------------------- ---+| @@character_set_database | @@collation_database |+--------------------------+--------------------------------- ----+| utf8 | utf8_general_ci |+--------------------------+-------------------- --+
Como alternativa, você pode usar a seguinte instrução (que elimina a necessidade de alterar o banco de dados padrão):
SELECT default_character_set_name, default_collation_nameFROM information_schema.schemata WHERE schema_name ='Música';
Exemplo de resultado:
+----------------------------+----------------- -------+| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |+----------------------------+------------------ ------+| utf8 | utf8_general_ci |+-------------------------------------------+------------------ ------+
Agrupamento em nível de tabela
A execução da instrução a seguir retornará um monte de colunas que fornecem informações sobre quaisquer tabelas correspondentes. Uma dessas colunas é chamada Collation , e fornece o agrupamento de todas as tabelas correspondentes.
MOSTRAR STATUS DA TABELA COMO '%Artists%';
Claro, você precisará substituir
%Artists%
com seu próprio nome de tabela. E você pode omitir os sinais de porcentagem se achar que eles não são necessários. Esta declaração também aceita outras cláusulas, como FROM
, WHERE
e IN
, então isso lhe dá algumas opções ao construir sua declaração. Um problema com a instrução anterior é que ela retorna muitas colunas e você pode ser forçado a rolar para os lados para encontrar a coluna de agrupamento. Se você estiver interessado apenas nas informações de agrupamento, consulte
information_schema.tables
. Você também pode retornar o agrupamento para todas as tabelas em um determinado banco de dados, se necessário. Veja como fazer isso:SELECT table_schema, table_name, table_collation FROM information_schema.tablesWHERE table_schema ='Music';
Resultados de exemplo:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |+--------------+------------+-----------------+| Música | Álbuns | utf8_general_ci || Música | Artistas | utf8_general_ci || Música | Gêneros | utf8_general_ci |+--------------+------------+-----------------+Agrupamento em nível de coluna
A execução da consulta a seguir retorna informações sobre cada coluna em uma determinada tabela. Isso inclui as informações de agrupamento.
MOSTRAR COLUNAS COMPLETAS DE Artistas;
Isso resulta em muitas colunas sendo retornadas com todos os tipos de informações sobre a coluna, incluindo o agrupamento.
Você pode reduzir o número de colunas retornadas fazendo isso:
SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_name ='Artistas';
Exemplo de resultado:
+-------------+--------------------+----------- ------+| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME |+-------------+------+------------ -----+| ArtistId | NULO | NULO || ArtistName | utf8 | utf8_spanish_ci || AtivoDe | NULO | NULL |+-------------+--------------------+------------ -----+
Você também pode executar oSHOW CREATE TABLE
instrução para exibir uma definição da tabela (que inclui suas colunas).
SHOW CREATE TABLE Artistas;
Isso retorna algo assim:
+---------+--------------------------------+| Tabela | Criar Tabela |+---------+--------------------------------+| Artistas | CREATE TABLE `Artists` ( `ArtistId` int(11) NOT NULL AUTO_INCREMENT, `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL, `ActiveFrom` datetime NOT NULL, PRIMARY KEY (`ArtistId`)) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 |+---------+------------------------------- -+
No entanto, as informações do conjunto de caracteres e da ordenação só serão retornadas se forem diferentes da ordenação padrão da tabela. Neste exemplo, defini explicitamente oArtistName
column para um agrupamento diferente apenas para fins de demonstração (caso contrário, as informações de agrupamento não teriam sido retornadas).