mysql проверяет сопоставление таблицы

106

Как я могу увидеть параметры сортировки в таблице? IE хочу увидеть:

+-----------------------------+
|  table  |     collation     |
|-----------------------------|
| t_name  |  latin_general_ci |
+-----------------------------+
Скотт
источник

Ответы:

159

SHOW TABLE STATUS показывает информацию о таблице, включая параметры сортировки.

Например SHOW TABLE STATUS where name like 'TABLE_NAME'

Lekensteyn
источник
78

Приведенный выше ответ хорош, но на самом деле он не дает примера, который избавляет пользователя от необходимости искать синтаксис:

show table status like 'test';

Где testимя таблицы.

(Исправлено в соответствии с комментариями ниже.)

Мустафа Элькаббани
источник
14

Вы также можете запросить INFORMATION_SCHEMA.TABLESи получить сопоставление для конкретной таблицы:

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

это дает гораздо более читаемый результат, чем SHOW TABLE STATUSтот, который содержит много не относящейся к делу информации.


Обратите внимание, что сопоставление также может применяться к столбцам (которые могут иметь другое сопоставление, чем сама таблица). Чтобы получить сопоставление столбцов для конкретной таблицы, вы можете запросить INFORMATION_SCHEMA.COLUMNS:

SELECT TABLE_SCHEMA 
    , TABLE_NAME 
    , COLUMN_NAME 
    , COLLATION_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 't_name';
Giorgos Myrianthous
источник
2
Работы для MariaDB 10.4
тараторы
8

Используйте этот запрос:

SHOW CREATE TABLE tablename

Вы получите всю информацию, относящуюся к таблице.

Ризван Сиддики
источник
3
SHOW CREATE TABLE не отображает сопоставление. Вы должны использовать SHOW TABLE STATUS, как описано выше.
KateYoak
1
У меня работает в mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Я предполагаю, что он может не отображать сопоставление, если он установлен по умолчанию для базы данных в более поздних версиях mysql / mariadb.
DeveloperChris
1
@DeveloperChris То, что вы показываете, - это кодировка, а не сопоставление. Две таблицы могут иметь один и тот же набор символов utf8, но разные параметры сортировки utf8_general_ciпротив utf8_unicode_ci. Это может вызвать сообщения об ошибках, например HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... это сообщение, которое привело меня на эту страницу.
Деви Морган
0

Эта команда описывает

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)
работа
источник