mysql controlla le regole di confronto di una tabella


106

Come posso vedere quali regole di confronto ha una tabella? IE voglio vedere:

+-----------------------------+
|  table  |     collation     |
|-----------------------------|
| t_name  |  latin_general_ci |
+-----------------------------+

Risposte:


159

SHOW TABLE STATUS mostra le informazioni su una tabella, comprese le regole di confronto.

Per esempio SHOW TABLE STATUS where name like 'TABLE_NAME'


78

La risposta precedente è ottima, ma in realtà non fornisce un esempio che eviti all'utente di dover cercare la sintassi:

show table status like 'test';

Dov'è testil nome della tabella.

(Corretto come da commenti di seguito.)


14

Puoi anche eseguire query INFORMATION_SCHEMA.TABLESe ottenere le regole di confronto per una tabella specifica:

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

ciò fornisce un output molto più leggibile rispetto a SHOW TABLE STATUSquello che contiene molte informazioni irrilevanti.


Si noti che le regole di confronto possono essere applicate anche alle colonne (che potrebbero avere regole di confronto diverse rispetto alla tabella stessa). Per recuperare le regole di confronto delle colonne per una determinata tabella, puoi eseguire una query INFORMATION_SCHEMA.COLUMNS:

SELECT TABLE_SCHEMA 
    , TABLE_NAME 
    , COLUMN_NAME 
    , COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't_name';

2
Lavora per mariaDB 10.4
Tarator

8

Usa questa query:

SHOW CREATE TABLE tablename

Otterrai tutte le informazioni relative alla tabella.


3
SHOW CREATE TABLE non mostrerà le regole di confronto. È necessario utilizzare SHOW TABLE STATUS come descritto sopra.
KateYoak

1
Funziona per me in mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1La mia ipotesi è che potrebbe non mostrare le regole di confronto se è impostato sul valore predefinito per il database nelle versioni successive di mysql / mariadb.
DeveloperChris

1
@DeveloperChris Quello che mostri è il set di caratteri, non le regole di confronto. Due tabelle possono avere lo stesso set di caratteri utf8, ma regole di confronto diverse utf8_general_cirispetto a utf8_unicode_ci. Ciò può causare messaggi di errore come HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... che è il messaggio che mi ha portato a questa pagina.
Dewi Morgan

0

Questo comando descrive

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)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.