Làm cách nào để xem ký tự đặt cơ sở dữ liệu / bảng / cột của MySQL là gì?


Câu trả lời:


743

Đây là cách tôi làm -

Đối với Lược đồ (hoặc Cơ sở dữ liệu - chúng là từ đồng nghĩa):

SELECT default_character_set_name FROM information_schema.SCHEMATA 
WHERE schema_name = "schemaname";

Đối với Bàn:

SELECT CCSA.character_set_name FROM information_schema.`TABLES` T,
       information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` CCSA
WHERE CCSA.collation_name = T.table_collation
  AND T.table_schema = "schemaname"
  AND T.table_name = "tablename";

Đối với Cột:

SELECT character_set_name FROM information_schema.`COLUMNS` 
WHERE table_schema = "schemaname"
  AND table_name = "tablename"
  AND column_name = "columnname";

3
Tôi nên lưu ý rằng information_schema chỉ có trong MySQL 5 trở đi tôi tin.
Vex

4
Theo như tôi có thể nói gần nhất bạn có thể lấy thông tin về bộ ký tự cụ thể của cột trong MySQL <5 là thực hiện SHOW FULL COLUMNS TỪ tên bảng
Robin Winslow

14
Câu trả lời này rất hữu ích, nhưng nếu bạn muốn giải quyết vấn đề về ký tự / đối chiếu, có lẽ bạn cũng cần kiểm tra kết nối character_set, client_character_set, v.v ...: HIỂN THỊ BIỂU TƯỢNG THÍCH 'character_set%'; HIỂN THỊ BIỂU TƯỢNG THÍCH 'đối chiếu%';
BenL 6/2/2015

2
thao tác bảng trả về "Tập rỗng (0,00 giây)" cho tôi
minhajul

9
Đối với Schema-Dummies: Lưu ý, đó schemanamecó thể chỉ là tên cơ sở dữ liệu.
BurninLeo

465

Đối với cột :

SHOW FULL COLUMNS FROM table_name;

43
Xin chào, đây là tương lai nói! Đối với bất kỳ ai kiểm tra câu trả lời này, phương pháp này chỉ hiển thị Collation, thay vì bộ ký tự. Tôi tin rằng điều này đã thay đổi tại MySQL 5. (Xem câu trả lời có nhiều điểm hơn để có phương pháp tốt hơn).
fideloper

20
@fideloper, Với đối chiếu bạn có thể nói với bộ ký tự. Đó là bởi vì phần đầu tiên của đối chiếu bao gồm bộ ký tự, ví dụ nếu đối chiếu là latin1_swedish_ci, bộ ký tự không thể là bất cứ thứ gì khác ngoài latin1. Nếu đối chiếu là utf8mb4_general_ci, bộ ký tự không thể là bất cứ thứ gì khác ngoài utf8mb4.
Pacerier

1
Điều này cho bạn biết bộ ký tự bảng. Nó không cho bạn biết bộ ký tự của các bảng được tạo trong tương lai khi không có bộ ký tự nào được chỉ định trong cú pháp tạo bảng (bạn sẽ cần bộ ký tự lược đồ cho điều đó).
Hold OfferHunger

217

Đối với cơ sở dữ liệu :

USE your_database_name;
show variables like "character_set_database";
-- or:
-- show variables like "collation_database";

Cf. trang này . Và xem hướng dẫn sử dụng MySQL


3
Điều này chỉ trả lời 1/3 câu hỏi.
Tobias J

1
@TobyJ, tôi không thấy bạn phàn nàn tại stackoverflow.com/a/4805510/632951
Pacerier

cf là viết tắt của từ gì? liên kết không tồn tại mặc dù. @Pacerier
Yannis Dran

Điều này nên được hợp nhất trong câu trả lời hàng đầu. Nó thực sự giúp tôi.
beppe9000

150

Đối với tất cả các cơ sở dữ liệu bạn có trên máy chủ:

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

Đầu ra:

+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| my_database                | latin1  | latin1_swedish_ci  |
...
+----------------------------+---------+--------------------+

Đối với một cơ sở dữ liệu :

mysql> USE my_database;
mysql> show variables like "character_set_database";

Đầu ra:

    +----------------------------+---------+
    | Variable_name              |  Value  |
    +----------------------------+---------+
    | character_set_database     |  latin1 | 
    +----------------------------+---------+

Bắt đối chiếu cho các Bảng :

mysql> USE my_database;
mysql> SHOW TABLE STATUS WHERE NAME LIKE 'my_tablename';

HOẶC - sẽ xuất SQL hoàn chỉnh để tạo bảng:

mysql> show create table my_tablename


Lấy đối chiếu các cột :

mysql> SHOW FULL COLUMNS FROM my_tablename;

đầu ra:

+---------+--------------+--------------------+ ....
| field   | type         | collation          |
+---------+--------------+--------------------+ ....
| id      | int(10)      | (NULL)             |
| key     | varchar(255) | latin1_swedish_ci  |
| value   | varchar(255) | latin1_swedish_ci  |
+---------+--------------+--------------------+ ....

Phiên bản nào của mysql hiển thị đầu ra này cho type? Tôi có mysql 5.7.9 và typehiển thị data typecột không phải là character set. Một số như int(10) varchar(255)... vv và khôngutf8
MTK

Đầu ra của tôi cũng hiển thị typenhư data type@MTK, có lẽ ở trên là lỗi sao chép trong phần "đầu ra:".
tronmcp

65

Đối với bảng :

SHOW TABLE STATUS sẽ liệt kê tất cả các bảng.

Lọc bằng:

SHOW TABLE STATUS where name like 'table_123';

9
Xin lưu ý. Đối chiếu được hiển thị trong trạng thái bảng hiển thị không phải là bộ ký tự của bảng. Đối chiếu cho bạn biết cách sắp xếp / so sánh các ký tự. ví dụ: utf8_bin_ci so sánh dữ liệu mà không liên quan đến trường hợp (không phân biệt chữ hoa chữ thường, vì vậy "m" và "M" là như nhau), utf8_bin_cs so sánh với độ nhạy trường hợp (vì vậy "m" và "M" là khác biệt). Điều này không giống với bộ ký tự của một bảng.
Daan

6
@Daan, Ngừng truyền bá thông tin sai lệch. Xem stackoverflow.com/questions/1049728/ , với sự đối chiếu bạn có thể nói với bộ ký tự.
Pacerier

44

Đối với cơ sở dữ liệu :

Chỉ cần sử dụng các lệnh sau:

USE db_name;
SELECT @@character_set_database;
-- or:
-- SELECT @@collation_database;

34
CHỌN TABLE_SCHema,
       TABLE_NAME,
       CCSA.CHARACTER_SET_NAME NHƯ DEFAULT_CHAR_SET,
       TÊN CỘT DỌC,
       COLUMN_TYPE,
       C.CHARACTER_SET_NAME
  TỪ information_schema.TABLES AS T
  THAM GIA thông tin_schema.COLUMNS NHƯ C SỬ DỤNG (TABLE_SCHema, TABLE_NAME)
  THAM GIA thông tin_schema.COLLATION_CHARACTER_SET_APPLICABILITY NHƯ CCSA
       BẬT (T.TABLE_COLLATION = CCSA.COLLATION_NAME)
 WHERE TABLE_SCHema = SCHema ()
   VÀ C.DATA_TYPE IN ('enum', 'varchar', 'char', 'text', 'Mediumtext', 'longtext')
 ĐẶT HÀNG B TNG TABLE_SCHema,
          TABLE_NAME,
          TÊN CỘT DỌC
;

2
Rất tốt, Eric. Chỉ cần dán mã đó vào dòng lệnh mysql, nhấn return và bạn sẽ có được bộ ký tự của mỗi cột trong mỗi bảng trong mỗi cơ sở dữ liệu :)
Jerry Krinock

1
@JerryKrinock Bạn nhận được mọi cột của cơ sở dữ liệu hiện tại và không có gì nếu không có cơ sở dữ liệu nào được chọn.
Ortomala Lokni

24

Tôi luôn luôn chỉ nhìn vào SHOW CREATE TABLE mydatabase.mytable.

Đối với cơ sở dữ liệu, có vẻ như bạn cần xem xét SELECT DEFAULT_CHARACTER_SET_NAME FROM information_schema.SCHEMATA.


3
trong cơ sở dữ liệu mysql có thể có các bộ ký tự mặc định
James

3
select default_character_set_name from information_schema.schematalà không đủ vì bạn không thể biết hàng nào tương quan với cơ sở dữ liệu nào. Sử dụng select default_character_set_name,schema_name from information_schema.schematahoặc đơn giản là : select*from information_schema.schemata.
Pacerier

Tôi đã sử dụng SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME = '<database-name>' \G; Và nó hoạt động rất tốt :) Cảm ơn!
Sankalp

23

Để xem đối chiếu mặc định của cơ sở dữ liệu:

USE db_name;
SELECT @@character_set_database, @@collation_database;

Để xem đối chiếu của bảng:

SHOW TABLE STATUS where name like 'table_name';

Để xem đối chiếu các cột:

SHOW FULL COLUMNS FROM table_name;

21

Đối với bảngcột :

show create table your_table_name

2
Nó cho bạn biết SQL đầy đủ sẽ được sử dụng để tạo bảng như hiện tại, bao gồm bộ ký tự của nó.
James

Ngoài ra, nếu cột không nêu một bộ ký tự cụ thể, thì nó đang sử dụng bộ ký tự mặc định của bảng.
Pacerier

18

Đối với cơ sở dữ liệu :

SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;

Ví dụ đầu ra:

mysql> SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA;
+----------------------------+---------+--------------------+
| database                   | charset | collation          |
+----------------------------+---------+--------------------+
| information_schema         | utf8    | utf8_general_ci    |
| drupal_demo1               | utf8    | utf8_general_ci    |
| drupal_demo2               | utf8    | utf8_general_ci    |
| drupal_demo3               | utf8    | utf8_general_ci    |
| drupal_demo4               | utf8    | utf8_general_ci    |
| drupal_demo5               | latin1  | latin1_swedish_ci  |

...

+----------------------------+---------+--------------------+
55 rows in set (0.00 sec)

mysql> 


1
@Pacerier bạn đã thực sự so sánh câu trả lời của tôi với những điều này đúng chưa?
sjas

15

Đối với cơ sở dữ liệu :

SHOW CREATE DATABASE "DB_NAME_HERE";

Khi tạo Cơ sở dữ liệu (MySQL), bộ / ký tự mặc định luôn luôn là LATIN, thay vào đó bạn đã chọn một cơ sở dữ liệu khác khi tạo cơ sở dữ liệu ban đầu


3
Trích dẫn cần thiết cho "bộ ký tự / đối chiếu mặc định luôn là LATIN" trong MySQL.
Pacerier

Cần dẫn nguồn? Bạn đã bao giờ sử dụng cơ sở dữ liệu MySQL chưa? Mọi người đều biết rằng bộ / đối chiếu mặc định của nhân vật là latin1_swedish_cibởi vì Monty Widenius, người tạo ra MySQL, là người Thụy Điển và đã không nghĩ là Bức tranh lớn như anh ta nên có khi bắt đầu.
Spencer Williams

5

Như nhiều người đã viết trước đó, SHOW FULL COLUMNS nên là phương pháp ưa thích để lấy thông tin cột. Điều còn thiếu là một cách để có bộ ký tự sau đó mà không cần truy cập trực tiếp vào bảng siêu dữ liệu:

SHOW FULL COLUMNS FROM my_table WHERE Field = 'my_field'
SHOW COLLATION WHERE Collation = 'collation_you_got'
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.