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.