mysql verificar o agrupamento de uma tabela

106

Como posso ver o agrupamento de uma tabela? IE eu quero ver:

+-----------------------------+
|  table  |     collation     |
|-----------------------------|
| t_name  |  latin_general_ci |
+-----------------------------+
Scott
fonte

Respostas:

159

SHOW TABLE STATUS mostra informações sobre uma tabela, incluindo o agrupamento.

Por exemplo SHOW TABLE STATUS where name like 'TABLE_NAME'

Lekensteyn
fonte
78

A resposta acima é ótima, mas na verdade não fornece um exemplo que evite que o usuário tenha que procurar a sintaxe:

show table status like 'test';

Onde testestá o nome da tabela.

(Corrigido de acordo com os comentários abaixo.)

Moustafa Elqabbany
fonte
14

Você também pode consultar INFORMATION_SCHEMA.TABLESe obter o agrupamento para uma tabela específica:

SELECT TABLE_SCHEMA
    , TABLE_NAME
    , TABLE_COLLATION 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 't_name';

que fornece uma saída muito mais legível em contraste com a SHOW TABLE STATUSque contém muitas informações irrelevantes.


Observe que o agrupamento também pode ser aplicado a colunas (que podem ter um agrupamento diferente do da própria tabela). Para buscar o agrupamento das colunas para uma tabela específica, você pode consultar INFORMATION_SCHEMA.COLUMNS:

SELECT TABLE_SCHEMA 
    , TABLE_NAME 
    , COLUMN_NAME 
    , COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't_name';
Giorgos Myrianthous
fonte
2
Trabalha para mariaDB 10.4
Tarator
8

Use esta consulta:

SHOW CREATE TABLE tablename

Você obterá todas as informações relacionadas à tabela.

Rizwan Siddiquee
fonte
3
SHOW CREATE TABLE não mostrará agrupamento. Você deve usar SHOW TABLE STATUS conforme descrito acima.
KateYoak de
1
Funciona para mim no mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Meu palpite é que ele pode não mostrar o agrupamento se estiver definido como padrão para o banco de dados em versões posteriores do mysql / mariadb.
DeveloperChris
1
@DeveloperChris O que você mostra é o conjunto de caracteres, não o agrupamento. Duas tabelas podem ter o mesmo charset utf8, mas diferentes agrupamentos utf8_general_civs utf8_unicode_ci. Isso pode causar mensagens de erro como HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... que é a mensagem que me trouxe a esta página.
Dewi Morgan
0

Este comando descreve

mysql> use <database name> 

mysql> show table status like '<table name>';

+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+---------------------+------------+--------------------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time         | Check_time | Collation          | Checksum | Create_options | Comment |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+---------------------+------------+--------------------+----------+----------------+---------+
| test | InnoDB |      11 | Dynamic    |   52 |            315 |       16384 |               0 |            0 |         0 |             59 | NULL        | 2020-04-16 23:00:00 | NULL       | utf8mb4_unicode_ci |     NULL |                |         |
+------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+-------------+---------------------+------------+--------------------+----------+----------------+---------+
1 row in set (0.01 sec)
jobin
fonte