mysql vérifie le classement d'une table

106

Comment puis-je voir le classement d'une table? IE je veux voir:

+-----------------------------+
|  table  |     collation     |
|-----------------------------|
| t_name  |  latin_general_ci |
+-----------------------------+
Scott
la source

Réponses:

159

SHOW TABLE STATUS affiche des informations sur une table, y compris le classement.

Par exemple SHOW TABLE STATUS where name like 'TABLE_NAME'

Lekensteyn
la source
78

La réponse ci-dessus est excellente, mais elle ne fournit pas réellement d'exemple qui évite à l'utilisateur d'avoir à rechercher la syntaxe:

show table status like 'test';

testest le nom de la table.

(Corrigé selon les commentaires ci-dessous.)

Moustafa Elqabbany
la source
14

Vous pouvez également interroger INFORMATION_SCHEMA.TABLESet obtenir le classement pour une table spécifique:

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

cela donne une sortie beaucoup plus lisible contrairement à SHOW TABLE STATUScelle qui contient beaucoup d'informations non pertinentes.


Notez que le classement peut également être appliqué aux colonnes (qui peuvent avoir un classement différent de celui de la table elle-même). Pour récupérer le classement des colonnes d'une table particulière, vous pouvez interroger INFORMATION_SCHEMA.COLUMNS:

SELECT TABLE_SCHEMA 
    , TABLE_NAME 
    , COLUMN_NAME 
    , COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't_name';
Giorgos Myrianthous
la source
2
Fonctionne pour mariaDB 10.4
Tarator
8

Utilisez cette requête:

SHOW CREATE TABLE tablename

Vous obtiendrez toutes les informations relatives à la table.

Rizwan Siddiquee
la source
3
SHOW CREATE TABLE n'affichera pas le classement. Vous devez utiliser SHOW TABLE STATUS comme décrit ci-dessus.
KateYoak
1
Fonctionne pour moi dans mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Je suppose qu'il peut ne pas afficher le classement s'il est défini par défaut pour la base de données dans les versions ultérieures de mysql / mariadb.
DeveloperChris
1
@DeveloperChris Ce que vous affichez est le jeu de caractères, pas le classement. Deux tables peuvent avoir le même charset utf8, mais différents classements utf8_general_civs utf8_unicode_ci. Cela peut provoquer des messages d'erreur comme HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... qui est le message qui m'a amené à cette page.
Dewi Morgan
0

Cette commande décrit

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
la source