MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Tampilkan Collation di MariaDB

Di MariaDB, collation dapat diterapkan di banyak level. Collation dapat diterapkan di tingkat server, tingkat koneksi, tingkat database, tingkat tabel, dan bahkan di tingkat kolom.

Anda juga dapat menentukan susunan di tingkat kueri, sehingga akan menimpa susunan apa pun yang telah diterapkan di tingkat database, tabel, atau kolom.

MariaDB menyediakan sejumlah opsi untuk mengembalikan susunan di berbagai level.

Tampilkan Koneksi, Server, dan Pengumpulan Basis Data

Kita dapat menggunakan SHOW VARIABLES pernyataan administratif dengan LIKE klausa untuk mengembalikan variabel yang menyertakan string tertentu di dalam namanya.

Contoh:

SHOW VARIABLES LIKE 'collation%';

Contoh hasil:

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

Ini adalah hasil yang saya dapatkan di lingkungan pengujian saya. Hasil yang Anda dapatkan akan bergantung pada setelan Anda.

Masing-masing variabel terpisah ini dapat dikembalikan secara terpisah jika diperlukan (lihat di bawah).

Secara default, SHOW VARIABLES menunjukkan SESSION variabel. Dalam hal ini, ini mengembalikan nilai yang berlaku untuk koneksi saat ini.

Oleh karena itu, contoh sebelumnya dapat ditulis ulang sebagai berikut:

SHOW SESSION VARIABLES LIKE 'collation%';

Contoh hasil:

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

Atau, Anda dapat mengganti SESSION dengan LOCAL (yang merupakan sinonim dari SESSION ):

SHOW LOCAL VARIABLES LIKE 'collation%';

Anda juga dapat menggunakan GLOBAL pengubah untuk menampilkan nilai yang digunakan untuk koneksi baru ke MariaDB.

Contoh:

SHOW GLOBAL VARIABLES LIKE 'collation%';

Contoh hasil:

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

Pengumpulan Server

Perintah berikut mengembalikan susunan default server:

SELECT @@collation_server;

Contoh hasil:

+--------------------+
| @@collation_server |
+--------------------+
| utf8mb4_general_ci |
+--------------------+

Pengumpulan Tingkat Koneksi

Saat Anda menjalankan kueri terhadap database MariaDB, MariaDB menggunakan sekelompok variabel sistem untuk menentukan kumpulan karakter dan susunan mana yang akan digunakan setiap kali kueri dijalankan. Jika klien menggunakan kumpulan karakter yang berbeda ke server, maka MariaDB dapat menerjemahkannya ke dalam kumpulan karakter dan susunan yang sesuai.

Saat mengirim hasil kueri kembali ke klien, MariaDB dapat menerjemahkan hasil ini kembali ke kumpulan karakter yang berbeda sama sekali jika diperlukan. MariaDB menggunakan variabel sistem untuk menentukan kumpulan karakter dan susunan mana yang akan digunakan pada setiap langkah ini.

Berikut ini adalah susunan koneksi (Anda dapat menggunakan sintaks yang sama untuk variabel sistem mana pun):

SELECT @@collation_connection;

Contoh hasil:

+------------------------+
| @@collation_connection |
+------------------------+
| utf8_general_ci        |
+------------------------+

Anda juga dapat mengembalikan semua variabel sistem set karakter dengan kueri berikut:

SHOW VARIABLES LIKE 'character_set%';

Hasil:

+--------------------------+--------------------------------------------------------+
| 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/ |
+--------------------------+--------------------------------------------------------+

Pengumpulan Tingkat Basis Data

Pernyataan berikut dapat digunakan untuk memeriksa susunan database yang diberikan:

USE PetHouse;
SELECT @@character_set_database, @@collation_database;

Contoh hasil:

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

Cara lain untuk melakukannya, adalah dengan menggunakan pernyataan seperti ini:

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

Contoh hasil:

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

Menggunakan metode kedua ini memungkinkan Anda untuk mendapatkan hasil tanpa berpindah database.

Ini dia menggunakan database yang berbeda:

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

Contoh hasil:

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

Ini adalah database pengujian yang dibuat ketika saya pertama kali menginstal MariaDB.

Kolasi Tingkat Tabel

Pernyataan berikut mengembalikan sejumlah kolom yang menyediakan informasi tentang tabel yang cocok. Salah satu kolom ini disebut Collation , dan menyediakan susunan semua tabel yang cocok.

SHOW TABLE STATUS LIKE '%Pets%';

Contoh hasil (menggunakan keluaran vertikal):

*************************** 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

Dalam hal ini, saya mendapat informasi tentang tabel bernama Pets . Kita dapat melihat bahwa Collation kolom berisi utf8mb4_general_ci , yang merupakan susunan tabel.

Pernyataan ini juga menerima klausa lain, seperti FROM , WHERE , dan IN , jadi ini memberi Anda beberapa opsi saat membuat pernyataan.

Cara lain untuk mendapatkan informasi pemeriksaan tentang tabel Anda adalah dengan menjalankan kueri terhadap information_schema.tables :

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

Contoh hasil:

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

Kolasi Tingkat Kolom

Menjalankan kueri berikut mengembalikan informasi tentang setiap kolom di Pets meja. Ini termasuk informasi pemeriksaan.

SHOW FULL COLUMNS FROM Pets;

Contoh hasil:

+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| 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 |         |
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+

Atau, kita dapat menanyakan information_schema.columns . Dalam hal ini, kami hanya dapat memilih kolom yang kami minati:

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

Contoh hasil:

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

Dan opsi lain yang kami miliki di perangkat kami adalah memeriksa CREATE TABLE pernyataan meja kami.

Seperti ini:

SHOW CREATE TABLE Pets;

Hasil:

+-------+------------------------------+
| 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 |
+-------+-------------------------------+

Namun, kumpulan karakter dan informasi susunan hanya dikembalikan jika berbeda dari susunan default tabel. Dalam contoh ini, informasi pemeriksaan tidak berbeda, sehingga tidak ada informasi pemeriksaan yang dikembalikan.

Mari kita ubah susunannya:

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

Dan jalankan SHOW CREATE TABLE lagi:

SHOW CREATE TABLE Pets;

Hasil:

+-------+------------------------------+
| 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 |
+-------+-------------------------------+

Kali ini kita dapat melihat set karakter baru dan pengaturan collation terhadap PetName kolom.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana UTC_DATE() Bekerja di MariaDB

  2. 3 Cara Mendapatkan Kolasi Kolom di MariaDB

  3. MariaDB 10.6 dan NextCloud:COMPRESSED Row secara default hanya-baca

  4. Mengonfigurasi Otentikasi LDAP dan Pemetaan Grup Dengan MariaDB

  5. Bagaimana ELT() Bekerja di MariaDB