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


106

Як я бачу, яке поєднання має таблиця? IE Я хочу бачити:

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

Відповіді:



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

2
Роботи для MariaDB 10.4
таратор

8

Скористайтеся цим запитом:

SHOW CREATE TABLE tablename

Ви отримаєте всю інформацію, що стосується таблиці.


3
ШОУ СТВОРИТИ ТАБЛИЦЮ не відображатиметься порівнянням. Ви повинні використовувати ШОУ ТАБЛИЧНОГО СТАТУСУ, як описано вище.
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)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.