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

Hiển thị đối chiếu trong MariaDB

Trong MariaDB, đối chiếu có thể được áp dụng ở nhiều cấp độ. Đối chiếu 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.

Cũng có thể chỉ định một đối chiếu ở cấp truy vấn để nó sẽ ghi đè mọi đối chiếu đã được áp dụng ở cấp cơ sở dữ liệu, bảng hoặc cột.

MariaDB cung cấp một số tùy chọn để trả lại đối chiếu ở các cấp độ khác nhau.

Hiển thị Kết nối, Máy chủ và Đối chiếu Cơ sở dữ liệu

Chúng ta có thể sử dụng SHOW VARIABLES câu lệnh quản trị với LIKE mệnh đề để trả về các biến bao gồm một chuỗi nhất định trong tên của chúng.

Ví dụ:

SHOW VARIABLES LIKE 'collation%';

Kết quả ví dụ:

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

Đây là những kết quả mà tôi nhận được trong môi trường thử nghiệm của mình. Kết quả bạn nhận được sẽ phụ thuộc vào cài đặt của bạn.

Mỗi biến trong số các biến riêng biệt này có thể được trả về riêng biệt nếu được yêu cầu (xem bên dưới).

Theo mặc định, SHOW VARIABLES hiển thị SESSION biến. Trong trường hợp này, nó trả về các giá trị có hiệu lực cho kết nối hiện tại.

Do đó, ví dụ trước có thể được viết lại như sau:

SHOW SESSION VARIABLES LIKE 'collation%';

Kết quả ví dụ:

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

Ngoài ra, bạn có thể thay thế SESSION với LOCAL (là từ đồng nghĩa với SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Bạn cũng có thể sử dụng GLOBAL sửa đổi để hiển thị các giá trị được sử dụng cho các kết nối mới với MariaDB.

Ví dụ:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Kết quả ví dụ:

+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

Đối chiếu máy chủ

Lệnh sau trả về đối chiếu mặc định của máy chủ:

SELECT @@collation_server;

Kết quả ví dụ:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_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 MariaDB, MariaDB 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 bộ ký tự khác cho máy chủ, thì MariaDB có thể dịch nó thành 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, MariaDB có thể dịch hoàn toàn các kết quả này sang một bộ ký tự khác nếu được yêu cầu. MariaDB 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 |
+------------------------+
| utf8_general_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ả:

+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database   | utf8mb4                                                |
| character_set_filesystem | binary                                                 |
| character_set_results    | utf8                                                   |
| character_set_server     | utf8mb4                                                |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/Cellar/mariadb/10.5.9/share/mysql/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 PetHouse;
SELECT @@character_set_database, @@collation_database;

Kết quả ví dụ:

+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_general_ci   |
+--------------------------+----------------------+

Một cách khác để làm điều đó, là sử dụng một câu lệnh như sau:

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

Kết quả ví dụ:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| utf8mb4                    | utf8mb4_general_ci     |
+----------------------------+------------------------+

Sử dụng phương pháp thứ hai này cho phép bạn nhận được kết quả mà không cần chuyển đổi cơ sở dữ liệu.

Ở đây nó đang sử dụng một cơ sở dữ liệu khác:

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

Kết quả ví dụ:

+----------------------------+------------------------+
| default_character_set_name | default_collation_name |
+----------------------------+------------------------+
| latin1                     | latin1_swedish_ci      |
+----------------------------+------------------------+

Đây là cơ sở dữ liệu thử nghiệm được tạo khi tôi cài đặt MariaDB lần đầu tiên.

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

Câu lệnh sau trả về một số 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 '%Pets%';

Kết quả mẫu (sử dụng đầu ra dọc):

*************************** 1. row ***************************
            Name: Pets
          Engine: InnoDB
         Version: 10
      Row_format: Dynamic
            Rows: 8
  Avg_row_length: 2048
     Data_length: 16384
 Max_data_length: 0
    Index_length: 32768
       Data_free: 0
  Auto_increment: NULL
     Create_time: 2021-03-30 09:10:38
     Update_time: 2021-03-30 09:16:39
      Check_time: NULL
       Collation: utf8mb4_general_ci
        Checksum: NULL
  Create_options: 
         Comment: 
Max_index_length: 0
       Temporary: N

Trong trường hợp này, tôi nhận được thông tin về một bảng có tên Pets . Chúng ta có thể thấy rằng Collation cột chứa utf8mb4_general_ci , là đối chiếu của bảng.

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 cách khác để nhận thông tin đối chiếu về các bảng của bạn là chạy truy vấn đối với information_schema.tables :

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

Kết quả ví dụ:

+--------------+---------------+--------------------+
| table_schema | table_name    | table_collation    |
+--------------+---------------+--------------------+
| pethouse     | vpettypecount | NULL               |
| pethouse     | Pets          | utf8mb4_general_ci |
| pethouse     | Owners        | utf8mb4_general_ci |
| pethouse     | PetTypes      | utf8mb4_general_ci |
+--------------+---------------+--------------------+

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

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

SHOW FULL COLUMNS FROM Pets;

Kết quả ví dụ:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field     | Type        | Collation          | Null | Key | Default | Extra | Privileges                      | Comment |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| PetId     | int(11)     | NULL               | NO   | PRI | NULL    |       | select,insert,update,references |         |
| PetTypeId | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| OwnerId   | int(11)     | NULL               | NO   | MUL | NULL    |       | select,insert,update,references |         |
| PetName   | varchar(60) | utf8mb4_general_ci | NO   |     | NULL    |       | select,insert,update,references |         |
| DOB       | date        | NULL               | YES  |     | NULL    |       | select,insert,update,references |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

Ngoài ra, chúng tôi có thể truy vấn information_schema.columns . Trong trường hợp này, chúng tôi có thể chỉ chọn các cột mà chúng tôi quan tâm:

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

Kết quả ví dụ:

+-------------+--------------------+--------------------+
| column_name | character_set_name | collation_name     |
+-------------+--------------------+--------------------+
| PetId       | NULL               | NULL               |
| PetTypeId   | NULL               | NULL               |
| OwnerId     | NULL               | NULL               |
| PetName     | utf8mb4            | utf8mb4_general_ci |
| DOB         | NULL               | NULL               |
+-------------+--------------------+--------------------+

Và một tùy chọn khác mà chúng tôi có trong bộ công cụ của mình là xem CREATE TABLE tuyên bố của bảng của chúng tôi.

Như thế này:

SHOW CREATE TABLE Pets;

Kết quả:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(60) NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

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, thông tin đối chiếu không khác nhau, và do đó không có thông tin đối chiếu nào được trả lại.

Hãy thay đổi đối chiếu:

ALTER TABLE Pets 
MODIFY PetName VARCHAR(255) 
    CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;

Và chạy SHOW CREATE TABLE một lần nữa:

SHOW CREATE TABLE Pets;

Kết quả:

+-------+------------------------------+
| Table | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
+-------+------------------------------+
| Pets  | CREATE TABLE `Pets` (
  `PetId` int(11) NOT NULL,
  `PetTypeId` int(11) NOT NULL,
  `OwnerId` int(11) NOT NULL,
  `PetName` varchar(255) CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL,
  `DOB` date DEFAULT NULL,
  PRIMARY KEY (`PetId`),
  KEY `PetTypeId` (`PetTypeId`),
  KEY `OwnerId` (`OwnerId`),
  CONSTRAINT `pets_ibfk_1` FOREIGN KEY (`PetTypeId`) REFERENCES `PetTypes` (`PetTypeId`),
  CONSTRAINT `pets_ibfk_2` FOREIGN KEY (`OwnerId`) REFERENCES `Owners` (`OwnerId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-------+-------------------------------+

Lần này, chúng ta có thể thấy cài đặt bộ ký tự và đối chiếu mới dựa trên PetName cột.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách khắc phục sự cố cơ sở dữ liệu MySQL

  2. Thêm dấu phần trăm vào một số trong MariaDB

  3. Cách triển khai máy chủ MariaDB vào vùng chứa Docker

  4. Nhiều nô lệ sao chép bị trì hoãn để khôi phục thảm họa với RTO thấp

  5. Phần 2:Phân loại hình ảnh với Máy chủ MariaDB và TensorFlow - Hướng dẫn