MySQL überprüfen Kollatierung einer Tabelle

106

Wie kann ich sehen, welche Sortierung eine Tabelle hat? IE möchte ich sehen:

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

Antworten:

159

SHOW TABLE STATUS Zeigt Informationen zu einer Tabelle an, einschließlich der Sortierung.

Beispielsweise SHOW TABLE STATUS where name like 'TABLE_NAME'

Lekensteyn
quelle
78

Die obige Antwort ist großartig, bietet jedoch kein Beispiel, das den Benutzer davon abhält, die Syntax nachzuschlagen:

show table status like 'test';

Wo test ist der Tabellenname?

(Korrigiert gemäß den Kommentaren unten.)

Moustafa Elqabbany
quelle
14

Sie können auch INFORMATION_SCHEMA.TABLESdie Sortierung für eine bestimmte Tabelle abfragen und abrufen:

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

Das ergibt eine viel besser lesbare Ausgabe, im Gegensatz dazu SHOW TABLE STATUSenthält es viele irrelevante Informationen.


Beachten Sie, dass die Sortierung auch auf Spalten angewendet werden kann (die möglicherweise eine andere Sortierung als die Tabelle selbst haben). Um die Sortierung der Spalten für eine bestimmte Tabelle abzurufen, können Sie Folgendes abfragen INFORMATION_SCHEMA.COLUMNS:

SELECT TABLE_SCHEMA 
    , TABLE_NAME 
    , COLUMN_NAME 
    , COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't_name';
Giorgos Myrianthous
quelle
2
Funktioniert für mariaDB 10.4
Tarator
8

Verwenden Sie diese Abfrage:

SHOW CREATE TABLE tablename

Sie erhalten alle Informationen zur Tabelle.

Rizwan Siddiquee
quelle
3
SHOW CREATE TABLE zeigt keine Sortierung an. Sie müssen SHOW TABLE STATUS wie oben beschrieben verwenden.
KateYoak
1
Funktioniert für mich in MySQL 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Ich vermute, dass die Sortierung möglicherweise nicht angezeigt wird, wenn sie in späteren Versionen von mysql / mariadb auf den Standardwert für die Datenbank festgelegt ist.
DeveloperChris
1
@DeveloperChris Was Sie zeigen, ist der Zeichensatz, nicht die Sortierung. Zwei Tabellen können die gleiche charset utf8, aber verschiedene Sortierungen utf8_general_civs utf8_unicode_ci. Dies kann zu Fehlermeldungen wie HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... führen. Dies ist die Meldung, die mich auf diese Seite gebracht hat.
Dewi Morgan
0

Dieser Befehl beschreibt

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)
Job in
quelle