mysql comprueba la intercalación de una tabla

106

¿Cómo puedo ver qué colación tiene una tabla? Es decir, quiero ver:

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

Respuestas:

159

SHOW TABLE STATUS muestra información sobre una tabla, incluida la intercalación.

Por ejemplo SHOW TABLE STATUS where name like 'TABLE_NAME'

Lekensteyn
fuente
78

La respuesta anterior es excelente, pero en realidad no proporciona un ejemplo que evite que el usuario tenga que buscar la sintaxis:

show table status like 'test';

¿Dónde testestá el nombre de la tabla?

(Corregido según los comentarios a continuación).

Moustafa Elqabbany
fuente
14

También puede consultar INFORMATION_SCHEMA.TABLESy obtener la intercalación de una tabla específica:

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

que da una salida mucho más legible en contraste con la SHOW TABLE STATUSque contiene mucha información irrelevante.


Tenga en cuenta que la clasificación también se puede aplicar a las columnas (que pueden tener una clasificación diferente a la de la tabla). Para obtener la clasificación de las columnas para una tabla en particular, puede consultar INFORMATION_SCHEMA.COLUMNS:

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

Utilice esta consulta:

SHOW CREATE TABLE tablename

Obtendrá toda la información relacionada con la tabla.

Rizwan Siddiquee
fuente
3
SHOW CREATE TABLE no mostrará la clasificación. Tienes que usar SHOW TABLE STATUS como se describe arriba.
KateYoak
1
Funciona para mí en mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Supongo que es posible que no muestre la intercalación si se establece en el valor predeterminado para la base de datos en versiones posteriores de mysql / mariadb.
DeveloperChris
1
@DeveloperChris Lo que muestra es el juego de caracteres, no la colación. Dos mesas pueden tener el mismo juego de caracteres utf8, pero diferentes colaciones utf8_general_civs utf8_unicode_ci. Esto puede causar mensajes de error como HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... que es el mensaje que me trajo a esta página.
Dewi Morgan
0

Este comando describe

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)
trabajando
fuente