Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách tìm đối chiếu trong MySQL

Trong MySQL, đối chiếu có thể được áp dụng ở nhiều cấp độ. Nó có thể được áp dụng ở cấp độ máy chủ, cấp độ kết nối, cấp độ cơ sở dữ liệu, cấp độ bảng và thậm chí ở cấp độ cột. Bạn cũng có thể chỉ định một đối chiếu trong các truy vấn của mình sẽ ghi đè bất kỳ đối chiếu nào đã được áp dụng ở cấp cơ sở dữ liệu, bảng hoặc cột.

Dưới đây là cách tìm hiểu đối chiếu nào đang được áp dụng ở mỗi cấp độ này.

Lối tắt cho Kết nối, Máy chủ và Đối chiếu Cơ sở dữ liệu

Cách nhanh nhất để nhận thông tin đối chiếu cho kết nối, máy chủ và cơ sở dữ liệu là sử dụng câu lệnh sau. Câu lệnh này trả về tất cả các biến hệ thống bắt đầu bằng collation :

SHOW VARIABLES LIKE 'collation%';

Điều này trả về đối chiếu cho máy chủ, kết nối và cơ sở dữ liệu. Như thế này:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_0900_ai_ci |
| collation_database   | utf8_general_ci    |
| collation_server     | utf8mb4_0900_ai_ci |
+----------------------+--------------------+

Bạn cũng có thể trả về từng biến hệ thống này riêng biệt nếu được yêu cầu. Xem bên dưới để biết hướng dẫn về cách thực hiện điều đó.

Đối chiếu cấp máy chủ

Chạy lệnh sau sẽ trả về đối chiếu mặc định của máy chủ.

SELECT @@collation_server;

Kết quả ví dụ:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_0900_ai_ci |
+--------------------+

Đối chiếu cấp độ kết nối

Khi bạn chạy một truy vấn đối với cơ sở dữ liệu MySQL, MySQL sử dụng một loạt các biến hệ thống để xác định bộ ký tự và đối chiếu nào sẽ sử dụng bất cứ khi nào truy vấn được chạy. Nếu máy khách sử dụng một bộ ký tự khác cho máy chủ, thì MySQL có thể dịch nó thành một bộ ký tự và đối chiếu thích hợp.

Khi gửi lại kết quả truy vấn cho máy khách, MySQL có thể dịch những kết quả này trở lại hoàn toàn thành một bộ ký tự khác nếu được yêu cầu. MySQL sử dụng các biến hệ thống để xác định bộ ký tự và đối chiếu nào sẽ sử dụng ở mỗi bước này.

Những điều sau đây chỉ ra sự đối chiếu kết nối (bạn có thể sử dụng cùng một cú pháp cho bất kỳ biến hệ thống nào):

SELECT @@collation_connection;

Kết quả ví dụ:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8mb4_0900_ai_ci     |
+------------------------+

Bạn cũng có thể trả về tất cả các biến hệ thống bộ ký tự bằng truy vấn sau:

SHOW VARIABLES LIKE 'character_set%';

Kết quả ví dụ:

+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | utf8mb4                          |
| character_set_connection | utf8mb4                          |
| character_set_database   | utf8                             |
| character_set_filesystem | binary                           |
| character_set_results    | utf8mb4                          |
| character_set_server     | utf8mb4                          |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+

Đối chiếu cấp độ cơ sở dữ liệu

Câu lệnh sau có thể được sử dụng để kiểm tra sự đối chiếu của một cơ sở dữ liệu nhất định:

USE Music;
SELECT @@character_set_database, @@collation_database;

Kết quả ví dụ:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8                     | utf8_general_ci      |
+--------------------------+----------------------+

Ngoài ra, bạn có thể sử dụng câu lệnh sau (giúp loại bỏ sự cần thiết phải thay đổi cơ sở dữ liệu mặc định):

SELECT 
   default_character_set_name, 
   default_collation_name
FROM information_schema.schemata 
WHERE schema_name = 'Music';

Kết quả ví dụ:

+----------------------------+------------------------+
| DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME |
+----------------------------+------------------------+
| utf8                       | utf8_general_ci        |
+----------------------------+------------------------+

Đối chiếu cấp bảng

Chạy câu lệnh sau sẽ trả về một loạt các cột cung cấp thông tin về bất kỳ bảng / s phù hợp nào. Một trong những cột này được gọi là Collation và nó cung cấp sự đối chiếu của tất cả các bảng phù hợp.

SHOW TABLE STATUS LIKE '%Artists%';

Tất nhiên, bạn sẽ cần thay thế %Artists% với tên bảng của riêng bạn. Và bạn có thể bỏ qua các dấu hiệu tỷ lệ phần trăm nếu bạn cho rằng chúng không cần thiết. Câu lệnh này cũng chấp nhận các mệnh đề khác, chẳng hạn như FROM , WHEREIN , do đó, điều này cung cấp cho bạn một số tùy chọn khi xây dựng báo cáo của mình.

Một vấn đề với câu lệnh trước đó là nó trả về rất nhiều cột và bạn có thể buộc phải cuộn sang ngang để tìm cột đối chiếu. Nếu bạn chỉ quan tâm đến thông tin đối chiếu, bạn có thể truy vấn information_schema.tables . Bạn cũng có thể trả về đối chiếu cho tất cả các bảng trong một cơ sở dữ liệu nhất định nếu được yêu cầu. Đây là cách thực hiện điều đó:

SELECT 
   table_schema,
   table_name,
   table_collation   
FROM information_schema.tables
WHERE table_schema = 'Music';

Kết quả ví dụ:

+--------------+------------+-----------------+
| TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION |
+--------------+------------+-----------------+
| Music        | Albums     | utf8_general_ci |
| Music        | Artists    | utf8_general_ci |
| Music        | Genres     | utf8_general_ci |
+--------------+------------+-----------------+

Đối chiếu cấp độ cột

Chạy truy vấn sau sẽ trả về thông tin về mỗi cột trong một bảng nhất định. Điều này bao gồm thông tin đối chiếu.

SHOW FULL COLUMNS FROM Artists;

Điều đó dẫn đến nhiều cột được trả về với tất cả các loại thông tin về cột, bao gồm cả đối chiếu.

Bạn có thể giảm số lượng cột được trả về bằng cách thực hiện điều này:

SELECT 
   column_name, 
   character_set_name, 
   collation_name 
FROM information_schema.columns 
WHERE table_name = 'Artists';

Kết quả ví dụ:

+-------------+--------------------+-----------------+
| COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME  |
+-------------+--------------------+-----------------+
| ArtistId    | NULL               | NULL            |
| ArtistName  | utf8               | utf8_spanish_ci |
| ActiveFrom  | NULL               | NULL            |
+-------------+--------------------+-----------------+

Bạn cũng có thể chạy SHOW CREATE TABLE để hiển thị định nghĩa của bảng (bao gồm các cột của nó).

SHOW CREATE TABLE Artists;

Điều này trả về một cái gì đó như thế này:

+---------+--------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                |
+---------+--------------------------------+
| Artists | CREATE TABLE `Artists` (
  `ArtistId` int(11) NOT NULL AUTO_INCREMENT,
  `ArtistName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `ActiveFrom` datetime NOT NULL,
  PRIMARY KEY (`ArtistId`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8 |
+---------+--------------------------------+

Tuy nhiên, bộ ký tự và thông tin đối chiếu chỉ được trả về nếu chúng khác với đối chiếu mặc định của bảng. Trong ví dụ này, tôi đặt ArtistName một cách rõ ràng đến một đối chiếu khác chỉ dành cho mục đích trình diễn (nếu không, thông tin đối chiếu sẽ không được trả lại).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về giao dịch PHP + MySQL

  2. Làm thế nào để chèn một tệp trong cơ sở dữ liệu MySQL?

  3. Truy xuất id được chèn lần cuối bằng Mysql

  4. Kết hợp các hoạt động UNION và LIMIT trong truy vấn MySQL

  5. Cách hoạt động của hàm UCASE () trong MySQL