MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

Mostrar o agrupamento no MariaDB


No MariaDB, o agrupamento pode ser aplicado em vários níveis. O agrupamento 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.

Também é possível especificar uma ordenação no nível da consulta, para que ela substitua qualquer ordenação que tenha sido aplicada nos níveis de banco de dados, tabela ou coluna.

O MariaDB oferece várias opções para retornar o agrupamento em vários níveis.

Mostrar a conexão, servidor e agrupamento de banco de dados


Podemos usar o SHOW VARIABLES instrução administrativa com o LIKE cláusula para retornar variáveis ​​que incluem uma determinada string em seus nomes.

Exemplo:
SHOW VARIABLES LIKE 'collation%';

Exemplo de resultado:
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Estes são os resultados que obtenho no meu ambiente de teste. O resultado obtido dependerá de suas configurações.

Cada uma dessas variáveis ​​separadas pode ser retornada separadamente, se necessário (veja abaixo).

Por padrão, SHOW VARIABLES mostra a SESSION variáveis. Nesse caso, ele retorna os valores que estão em vigor para a conexão atual.

Portanto, o exemplo anterior poderia ser reescrito da seguinte forma:
SHOW SESSION VARIABLES LIKE 'collation%';

Exemplo de resultado:
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8_general_ci    |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Alternativamente, você pode substituir SESSION com LOCAL (que é sinônimo de SESSION ):
SHOW LOCAL VARIABLES LIKE 'collation%';

Você também pode usar o GLOBAL modificador para exibir os valores que são usados ​​para novas conexões com MariaDB.

Exemplo:
SHOW GLOBAL VARIABLES LIKE 'collation%';

Exemplo de resultado:
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Agrupamento de servidores


O comando a seguir retorna o agrupamento padrão do servidor:
SELECT @@collation_server;

Exemplo de resultado:
+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_ci |
+--------------------+

Agrupamento em nível de conexão


Quando você executa uma consulta em um banco de dados MariaDB, o MariaDB 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 usar um conjunto de caracteres diferente do servidor, o MariaDB poderá traduzi-lo em um conjunto de caracteres e agrupamento apropriados.

Ao enviar os resultados da consulta de volta ao cliente, o MariaDB pode traduzir esses resultados de volta para um conjunto de caracteres diferente, se necessário. O MariaDB usa variáveis ​​do 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 |
+------------------------+
| utf8_general_ci        |
+------------------------+

Você também pode retornar todas as variáveis ​​de sistema do conjunto de caracteres com a seguinte consulta:
SHOW VARIABLES LIKE 'character_set%';

Resultado:
+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database   | utf8mb4                                                |
| character_set_filesystem | binary                                                 |
| character_set_results    | utf8                                                   |
| character_set_server     | utf8mb4                                                |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/Cellar/mariadb/10.5.9/share/mysql/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 PetHouse;
SELECT @@character_set_database, @@collation_database;

Exemplo de resultado:
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

Outra maneira de fazer isso é usar uma declaração como esta:
SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'PetHouse';

Exemplo de resultado:
+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |
+----------------------------+------------------------+

O uso desse segundo método permite obter os resultados sem alternar o banco de dados.

Aqui está usando um banco de dados diferente:
SELECT 
    default_character_set_name, 
    default_collation_name 
FROM information_schema.schemata 
WHERE schema_name = 'test';

Exemplo de resultado:
+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| latin1                     | latin1_swedish_ci      |
+----------------------------+------------------------+

Este é o banco de dados de teste que foi criado quando instalei o MariaDB pela primeira vez.

Agrupamento em nível de tabela


A instrução a seguir retorna várias colunas que fornecem informações sobre quaisquer tabelas correspondentes. Uma dessas colunas é chamada Collation , e fornece o agrupamento de todas as tabelas correspondentes.
SHOW TABLE STATUS LIKE '%Pets%';

Exemplo de resultado (usando saída vertical):
*************************** 1. row ***************************
            Name: Pets
          Engine: InnoDB
         Version: 10
      Row_format: Dynamic
            Rows: 8
  Avg_row_length: 2048
     Data_length: 16384
 Max_data_length: 0
    Index_length: 32768
       Data_free: 0
  Auto_increment: NULL
     Create_time: 2021-03-30 09:10:38
     Update_time: 2021-03-30 09:16:39
      Check_time: NULL
       Collation: utf8mb4_general_ci
        Checksum: NULL
  Create_options: 
         Comment: 
Max_index_length: 0
       Temporary: N

Neste caso, obtive informações sobre uma tabela chamada Pets . Podemos ver que o Collation coluna contém utf8mb4_general_ci , que é o agrupamento da tabela.

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.

Outra maneira de obter informações de agrupamento sobre suas tabelas é executar uma consulta em information_schema.tables :
SELECT 
    table_schema, 
    table_name, 
    table_collation 
FROM information_schema.tables 
WHERE table_schema = 'PetHouse';

Exemplo de resultado:
+--------------+---------------+--------------------+
| table_schema | table_name    | table_collation    |
+--------------+---------------+--------------------+
| pethouse     | vpettypecount | NULL               |
| pethouse     | Pets          | utf8mb4_general_ci |
| pethouse     | Owners        | utf8mb4_general_ci |
| pethouse     | PetTypes      | utf8mb4_general_ci |
+--------------+---------------+--------------------+

Agrupamento em nível de coluna


A execução da consulta a seguir retorna informações sobre cada coluna no Pets tabela. Isso inclui as informações de agrupamento.
SHOW FULL COLUMNS FROM Pets;

Exemplo de resultado:
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field     | Type        | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| PetId     | int(11)     | NULL               | NO   | PRI | NULL    |       | select,insert,update,references |         |
| PetTypeId | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| OwnerId   | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| PetName   | varchar(60) | utf8mb4_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
| DOB       | date        | NULL               | YES  |     | NULL    |       | select,insert,update,references |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

Alternativamente, podemos consultar information_schema.columns . Nesse caso, podemos escolher apenas as colunas que nos interessam:
SELECT 
    column_name, 
    character_set_name, 
    collation_name 
FROM information_schema.columns
WHERE table_name = 'Pets';

Exemplo de resultado:
+-------------+--------------------+--------------------+
| column_name | character_set_name | collation_name     |
+-------------+--------------------+--------------------+
| PetId       | NULL               | NULL               |
| PetTypeId   | NULL               | NULL               |
| OwnerId     | NULL               | NULL               |
| PetName     | utf8mb4            | utf8mb4_general_ci |
| DOB         | NULL               | NULL               |
+-------------+--------------------+--------------------+

E outra opção que temos em nosso kit de ferramentas é verificar o CREATE TABLE declaração de nossa tabela.

Assim:
SHOW CREATE TABLE Pets;

Resultado:
+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(60) NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

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, as informações de agrupamento não diferem e, portanto, nenhuma informação de agrupamento foi retornada.

Vamos alterar o agrupamento:
ALTER TABLE Pets 
MODIFY PetName VARCHAR(255) 
    CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

E execute SHOW CREATE TABLE novamente:
SHOW CREATE TABLE Pets;

Resultado:
+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

Desta vez, podemos ver o novo conjunto de caracteres e configurações de agrupamento em relação ao PetName coluna.