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 |
+-----------------------------+

Antworten:


159

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

Beispielsweise SHOW TABLE STATUS where name like 'TABLE_NAME'


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.)


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';

2
Funktioniert für mariaDB 10.4
Tarator

8

Verwenden Sie diese Abfrage:

SHOW CREATE TABLE tablename

Sie erhalten alle Informationen zur Tabelle.


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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.