मारियाडीबी में, कई स्तरों पर संयोजन लागू किया जा सकता है। Collation को सर्वर स्तर, कनेक्शन स्तर, डेटाबेस स्तर, तालिका स्तर और यहां तक कि स्तंभ स्तर पर भी लागू किया जा सकता है।
क्वेरी स्तर पर एक कॉलेशन निर्दिष्ट करना भी संभव है, ताकि यह डेटाबेस, टेबल या कॉलम लेवल पर लागू किए गए किसी भी कॉलेशन को ओवरराइड कर सके।
मारियाडीबी विभिन्न स्तरों पर संयोजन को वापस करने के लिए कई विकल्प प्रदान करता है।
कनेक्शन, सर्वर और डेटाबेस कोलेशन दिखाएं
हम SHOW VARIABLES
का उपयोग कर सकते हैं LIKE
. के साथ प्रशासनिक विवरण वेरिएबल्स को वापस करने के लिए क्लॉज जिसमें उनके नाम के भीतर एक निश्चित स्ट्रिंग शामिल है।
उदाहरण:
SHOW VARIABLES LIKE 'collation%';
उदाहरण परिणाम:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
ये वे परिणाम हैं जो मुझे अपने परीक्षण वातावरण में मिलते हैं। आपको मिलने वाला परिणाम आपकी सेटिंग पर निर्भर करेगा।
यदि आवश्यक हो तो इन अलग-अलग चरों में से प्रत्येक को अलग से लौटाया जा सकता है (नीचे देखें)।
डिफ़ॉल्ट रूप से, SHOW VARIABLES
SESSION
दिखाता है चर। इस मामले में, यह उन मानों को लौटाता है जो वर्तमान कनेक्शन के लिए प्रभावी हैं।
इसलिए, पिछले उदाहरण को निम्नानुसार फिर से लिखा जा सकता है:
SHOW SESSION VARIABLES LIKE 'collation%';
उदाहरण परिणाम:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
वैकल्पिक रूप से, आप SESSION
. को बदल सकते हैं LOCAL
. के साथ (जो SESSION
. का समानार्थी है ):
SHOW LOCAL VARIABLES LIKE 'collation%';
आप GLOBAL
का भी उपयोग कर सकते हैं मारियाडीबी के नए कनेक्शन के लिए उपयोग किए जाने वाले मानों को प्रदर्शित करने के लिए संशोधक।
उदाहरण:
SHOW GLOBAL VARIABLES LIKE 'collation%';
उदाहरण परिणाम:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
सर्वर संयोजन
निम्न आदेश सर्वर का डिफ़ॉल्ट संयोजन लौटाता है:
SELECT @@collation_server;
उदाहरण परिणाम:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_general_ci | +--------------------+
कनेक्शन-लेवल कोलेशन
जब आप मारियाडीबी डेटाबेस के खिलाफ एक क्वेरी चलाते हैं, तो मारियाडीबी सिस्टम चर के एक समूह का उपयोग करता है ताकि यह निर्धारित किया जा सके कि जब भी प्रश्न चलाए जाते हैं तो कौन सा वर्ण सेट और संयोजन का उपयोग करना है। यदि क्लाइंट सर्वर के लिए एक अलग वर्ण सेट का उपयोग करता है, तो मारियाडीबी इसे एक उपयुक्त वर्ण सेट और संयोजन में अनुवाद कर सकता है।
क्लाइंट को क्वेरी परिणाम वापस भेजते समय, मारियाडीबी इन परिणामों को आवश्यकता पड़ने पर पूरी तरह से एक अलग वर्ण सेट में अनुवाद कर सकता है। इनमें से प्रत्येक चरण में कौन से वर्ण सेट और कॉलेशन का उपयोग करना है, यह निर्धारित करने के लिए MariaDB सिस्टम चर का उपयोग करता है।
निम्नलिखित कनेक्शन संयोजन को अलग करता है (आप किसी भी सिस्टम चर के लिए समान सिंटैक्स का उपयोग कर सकते हैं):
SELECT @@collation_connection;
उदाहरण परिणाम:
+------------------------+ | @@collation_connection | +------------------------+ | utf8_general_ci | +------------------------+
आप निम्न क्वेरी के साथ सभी वर्ण सेट सिस्टम चर भी वापस कर सकते हैं:
SHOW VARIABLES LIKE 'character_set%';
परिणाम:
+--------------------------+--------------------------------------------------------+ | 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/ | +--------------------------+--------------------------------------------------------+
डेटाबेस-स्तर का मिलान
किसी दिए गए डेटाबेस के मिलान की जाँच के लिए निम्नलिखित कथन का उपयोग किया जा सकता है:
USE PetHouse;
SELECT @@character_set_database, @@collation_database;
उदाहरण परिणाम:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8mb4 | utf8mb4_general_ci | +--------------------------+----------------------+
इसे करने का एक और तरीका है, इस तरह के एक बयान का उपयोग करना:
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'PetHouse';
उदाहरण परिणाम:
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | utf8mb4 | utf8mb4_general_ci | +----------------------------+------------------------+
इस दूसरी विधि का उपयोग करने से आप डेटाबेस को स्विच किए बिना परिणाम प्राप्त कर सकते हैं।
यहाँ यह एक भिन्न डेटाबेस का उपयोग कर रहा है:
SELECT
default_character_set_name,
default_collation_name
FROM information_schema.schemata
WHERE schema_name = 'test';
उदाहरण परिणाम:
+----------------------------+------------------------+ | default_character_set_name | default_collation_name | +----------------------------+------------------------+ | latin1 | latin1_swedish_ci | +----------------------------+------------------------+
यह परीक्षण डेटाबेस है जो तब बनाया गया था जब मैंने पहली बार मारियाडीबी स्थापित किया था।
टेबल-लेवल कोलेशन
निम्नलिखित कथन कई कॉलम देता है जो किसी भी मिलान तालिका के बारे में जानकारी प्रदान करते हैं। इनमें से एक कॉलम को Collation . कहा जाता है , और यह सभी मेल खाने वाली तालिकाओं का मिलान प्रदान करता है।
SHOW TABLE STATUS LIKE '%Pets%';
उदाहरण परिणाम (ऊर्ध्वाधर आउटपुट का उपयोग करके):
*************************** 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
इस मामले में, मुझे Pets
. नामक तालिका के बारे में जानकारी मिली है . हम देख सकते हैं कि Collation
कॉलम में utf8mb4_general_ci
है , जो तालिका का संयोजन है।
यह कथन अन्य खंडों को भी स्वीकार करता है, जैसे FROM
, WHERE
, और IN
, इसलिए यह आपको अपना कथन बनाते समय कुछ विकल्प देता है।
अपनी तालिकाओं के बारे में मिलान जानकारी प्राप्त करने का दूसरा तरीका information_schema.tables
के विरुद्ध क्वेरी चलाना है :
SELECT
table_schema,
table_name,
table_collation
FROM information_schema.tables
WHERE table_schema = 'PetHouse';
उदाहरण परिणाम:
+--------------+---------------+--------------------+ | table_schema | table_name | table_collation | +--------------+---------------+--------------------+ | pethouse | vpettypecount | NULL | | pethouse | Pets | utf8mb4_general_ci | | pethouse | Owners | utf8mb4_general_ci | | pethouse | PetTypes | utf8mb4_general_ci | +--------------+---------------+--------------------+
स्तंभ-स्तर का मिलान
निम्नलिखित क्वेरी को चलाने से Pets
में प्रत्येक कॉलम के बारे में जानकारी मिलती है टेबल। इसमें मिलान जानकारी शामिल है।
SHOW FULL COLUMNS FROM Pets;
उदाहरण परिणाम:
+-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+ | 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 | | +-----------+-------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
वैकल्पिक रूप से, हम information_schema.columns
. को क्वेरी कर सकते हैं . इस मामले में, हम केवल वे कॉलम चुन सकते हैं जिनमें हमारी रुचि है:
SELECT
column_name,
character_set_name,
collation_name
FROM information_schema.columns
WHERE table_name = 'Pets';
उदाहरण परिणाम:
+-------------+--------------------+--------------------+ | column_name | character_set_name | collation_name | +-------------+--------------------+--------------------+ | PetId | NULL | NULL | | PetTypeId | NULL | NULL | | OwnerId | NULL | NULL | | PetName | utf8mb4 | utf8mb4_general_ci | | DOB | NULL | NULL | +-------------+--------------------+--------------------+
और हमारे टूलकिट में एक और विकल्प है CREATE TABLE
. की जांच करना हमारी तालिका का बयान।
इस तरह:
SHOW CREATE TABLE Pets;
परिणाम:
+-------+------------------------------+ | 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 | +-------+-------------------------------+
हालाँकि, वर्ण सेट और संयोजन जानकारी केवल तभी दी जाती है जब वे तालिका के डिफ़ॉल्ट संयोजन से भिन्न हों। इस उदाहरण में, मिलान जानकारी नहीं थी भिन्न, और इसलिए कोई मिलान जानकारी वापस नहीं की गई।
आइए मिलान को बदलें:
ALTER TABLE Pets
MODIFY PetName VARCHAR(255)
CHARACTER SET utf8 COLLATE utf8_spanish_ci NOT NULL;
और SHOW CREATE TABLE
run चलाएं फिर से:
SHOW CREATE TABLE Pets;
परिणाम:
+-------+------------------------------+ | 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 | +-------+-------------------------------+
इस बार हम PetName
. के विरुद्ध नए वर्ण सेट और संयोजन सेटिंग देख सकते हैं कॉलम।