đối chiếu kiểm tra mysql của một bảng


106

Làm cách nào để biết bảng có đối chiếu nào? IE tôi muốn xem:

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

Câu trả lời:



78

Câu trả lời trên là tuyệt vời, nhưng nó không thực sự cung cấp một ví dụ giúp người dùng không phải tra cứu cú pháp:

show table status like 'test';

Trong trường hợp testlà tên bảng.

(Đã sửa theo bình luận bên dưới.)


14

Bạn cũng có thể truy vấn INFORMATION_SCHEMA.TABLESvà lấy đối chiếu cho một bảng cụ thể:

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

mang lại kết quả đầu ra dễ đọc hơn nhiều so với đầu ra SHOW TABLE STATUSchứa nhiều thông tin không liên quan.


Lưu ý rằng đối chiếu cũng có thể được áp dụng cho các cột (có thể có đối chiếu khác với chính bảng). Để tìm nạp đối chiếu của các cột cho một bảng cụ thể, bạn có thể truy vấn INFORMATION_SCHEMA.COLUMNS:

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

2
Hoạt động cho mariaDB 10.4
Tarator

8

Sử dụng truy vấn này:

SHOW CREATE TABLE tablename

Bạn sẽ nhận được tất cả các thông tin liên quan đến bảng.


3
SHOW CREATE TABLE sẽ không hiển thị đối chiếu. Bạn phải sử dụng SHOW TABLE STATUS như đã mô tả ở trên.
KateYoak

1
Hoạt động cho tôi trong mysql 5.5.52. ...) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=latin1Tôi đoán là nó có thể không hiển thị đối chiếu nếu nó được đặt thành mặc định cho cơ sở dữ liệu trong các phiên bản sau của mysql / mariadb.
Nhà phát

1
@DeveloperChris Những gì bạn hiển thị là bộ ký tự, không phải đối chiếu. Hai bảng có thể có charset cùng utf8, nhưng collations khác nhau utf8_general_civs utf8_unicode_ci. Điều này có thể gây ra các thông báo lỗi như HY000, 1267, Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='... đó là thông báo đưa tôi đến trang này.
Dewi Morgan

0

Lệnh này mô tả

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)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.