mysql bir tablonun harmanlamasını kontrol et


106

Bir tablonun hangi harmanlamaya sahip olduğunu nasıl görebilirim? IE görmek istiyorum:

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

Yanıtlar:


159

SHOW TABLE STATUS harmanlama dahil olmak üzere bir tablo hakkındaki bilgileri gösterir.

Örneğin SHOW TABLE STATUS where name like 'TABLE_NAME'


78

Yukarıdaki cevap harika, ancak aslında kullanıcıyı sözdizimini aramaktan kurtaran bir örnek sağlamıyor:

show table status like 'test';

testTablo adı nerede .

(Aşağıdaki yorumlara göre düzeltilmiştir.)


14

Ayrıca INFORMATION_SCHEMA.TABLES, belirli bir tablo için sorgulama yapabilir ve harmanlamayı alabilirsiniz:

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

Bu, pek SHOW TABLE STATUSçok ilgisiz bilgi içerenlerin aksine çok daha okunabilir bir çıktı sağlar .


Harmanlamanın sütunlara da uygulanabileceğini unutmayın (tablonun kendisinden farklı bir harmanlamaya sahip olabilir). Belirli bir tablo için sütunların harmanlamasını getirmek için şunları sorgulayabilirsiniz 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 için çalışıyor
Tarator

8

Bu sorguyu kullanın:

SHOW CREATE TABLE tablename

Tablo ile ilgili tüm bilgileri alacaksınız.


3
SHOW CREATE TABLE, harmanlamayı göstermeyecek. SHOW TABLE STATUS'u yukarıda açıklandığı gibi kullanmanız gerekir.
KateYoak

1
MySQL 5.5.52'de benim için çalışıyor. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Benim tahminim mysql / mariadb'nin sonraki sürümlerinde veritabanı için varsayılan olarak ayarlanmışsa harmanlamayı göstermeyebilir.
DeveloperChris

1
@DeveloperChris Gösterdiğiniz şey harmanlama değil, karakter kümesidir. İki tablo aynı karakter setine sahip olabilir utf8, ancak farklı harmanlamalara utf8_general_cikarşı utf8_unicode_ci. Bu, HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='beni bu sayfaya getiren mesaj olan ... gibi hata mesajlarına neden olabilir .
Dewi Morgan

0

Bu komut açıklar

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.