MySQL में, कई स्तरों पर संयोजन लागू किया जा सकता है। इसे सर्वर स्तर, कनेक्शन स्तर, डेटाबेस स्तर, तालिका स्तर और यहां तक कि स्तंभ स्तर पर भी लागू किया जा सकता है। आप अपने प्रश्नों में एक कोलेशन भी निर्दिष्ट कर सकते हैं जो डेटाबेस, टेबल या कॉलम स्तर पर लागू किए गए किसी भी कॉलेशन को ओवरराइड कर देगा।
इन स्तरों में से प्रत्येक पर कौन सा संयोजन लागू किया जा रहा है, इसका पता लगाने का तरीका यहां दिया गया है।
कनेक्शन, सर्वर और डेटाबेस कोलेशन के लिए शॉर्टकट
कनेक्शन, सर्वर और डेटाबेस के लिए मिलान जानकारी प्राप्त करने का सबसे तेज़ तरीका निम्न कथन का उपयोग करना है। यह स्टेटमेंट collation
. से शुरू होने वाले सभी सिस्टम वैरिएबल लौटाता है :
SHOW VARIABLES LIKE 'collation%';
यह सर्वर, कनेक्शन और डेटाबेस के लिए संयोजन देता है। इस तरह:
+----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_0900_ai_ci | | collation_database | utf8_general_ci | | collation_server | utf8mb4_0900_ai_ci | +----------------------+--------------------+
यदि आवश्यक हो तो आप इनमें से प्रत्येक सिस्टम चर को अलग से वापस भी कर सकते हैं। इसे कैसे करें, इसके निर्देशों के लिए नीचे देखें।
सर्वर-स्तरीय संयोजन
निम्न कमांड को चलाने से सर्वर का डिफ़ॉल्ट कॉलेशन वापस आ जाता है।
SELECT @@collation_server;
उदाहरण परिणाम:
+--------------------+ | @@collation_server | +--------------------+ | utf8mb4_0900_ai_ci | +--------------------+
कनेक्शन-लेवल कोलेशन
जब आप किसी MySQL डेटाबेस के विरुद्ध कोई क्वेरी चलाते हैं, तो MySQL सिस्टम चरों के एक समूह का उपयोग यह निर्धारित करने के लिए करता है कि जब भी क्वेरीज़ चलाई जाती हैं तो कौन सा वर्ण सेट और संयोजन का उपयोग करना है। यदि क्लाइंट सर्वर पर किसी भिन्न वर्ण सेट का उपयोग करता है, तो MySQL इसे एक उपयुक्त वर्ण सेट और संयोजन में अनुवाद कर सकता है।
क्लाइंट को क्वेरी परिणाम वापस भेजते समय, यदि आवश्यक हो तो MySQL इन परिणामों को एक अलग वर्ण सेट में पूरी तरह से अनुवादित कर सकता है। MySQL सिस्टम चर का उपयोग यह निर्धारित करने के लिए करता है कि इनमें से प्रत्येक चरण में कौन से वर्ण सेट और कॉलेशन का उपयोग करना है।
निम्नलिखित कनेक्शन संयोजन को अलग करता है (आप किसी भी सिस्टम चर के लिए समान सिंटैक्स का उपयोग कर सकते हैं):
SELECT @@collation_connection;
उदाहरण परिणाम:
+------------------------+ | @@collation_connection | +------------------------+ | utf8mb4_0900_ai_ci | +------------------------+
आप निम्न क्वेरी के साथ सभी वर्ण सेट सिस्टम चर भी वापस कर सकते हैं:
SHOW VARIABLES LIKE 'character_set%';
उदाहरण परिणाम:
+--------------------------+----------------------------------+ | 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/ | +--------------------------+----------------------------------+
डेटाबेस-स्तर का मिलान
किसी दिए गए डेटाबेस के मिलान की जांच के लिए निम्नलिखित कथन का उपयोग किया जा सकता है:
USE Music; SELECT @@character_set_database, @@collation_database;
उदाहरण परिणाम:
+--------------------------+----------------------+ | @@character_set_database | @@collation_database | +--------------------------+----------------------+ | utf8 | utf8_general_ci | +--------------------------+----------------------+
वैकल्पिक रूप से, आप निम्न कथन का उपयोग कर सकते हैं (जो डिफ़ॉल्ट डेटाबेस को बदलने की आवश्यकता को समाप्त करता है):
SELECT default_character_set_name, default_collation_name FROM information_schema.schemata WHERE schema_name = 'Music';
उदाहरण परिणाम:
+----------------------------+------------------------+ | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | +----------------------------+------------------------+ | utf8 | utf8_general_ci | +----------------------------+------------------------+
टेबल-लेवल कोलेशन
निम्नलिखित कथन को चलाने से कॉलम का एक पूरा समूह वापस आ जाएगा जो किसी भी मिलान तालिका के बारे में जानकारी प्रदान करता है। इनमें से एक कॉलम को Collation . कहा जाता है , और यह सभी मेल खाने वाली तालिकाओं का मिलान प्रदान करता है।
SHOW TABLE STATUS LIKE '%Artists%';
बेशक, आपको %Artists%
. को बदलना होगा अपने खुद के टेबल नाम के साथ। और आप प्रतिशत चिह्नों को छोड़ सकते हैं यदि आपको नहीं लगता कि उनकी आवश्यकता है। यह कथन अन्य खंडों को भी स्वीकार करता है, जैसे FROM
, WHERE
, और IN
, इसलिए यह आपको अपना कथन बनाते समय कुछ विकल्प देता है।
पिछले कथन के साथ एक समस्या यह है कि यह बहुत सारे कॉलम लौटाता है, और आपको कॉलेशन कॉलम खोजने के लिए बग़ल में स्क्रॉल करने के लिए मजबूर किया जा सकता है। यदि आप केवल मिलान जानकारी में रुचि रखते हैं, तो आप information_schema.tables
क्वेरी कर सकते हैं . यदि आवश्यक हो तो आप किसी दिए गए डेटाबेस के भीतर सभी तालिकाओं के लिए संयोजन वापस कर सकते हैं। ऐसा करने का तरीका यहां बताया गया है:
SELECT table_schema, table_name, table_collation FROM information_schema.tables WHERE table_schema = 'Music';
उदाहरण परिणाम:
+--------------+------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | TABLE_COLLATION | +--------------+------------+-----------------+ | Music | Albums | utf8_general_ci | | Music | Artists | utf8_general_ci | | Music | Genres | utf8_general_ci | +--------------+------------+-----------------+
स्तंभ-स्तर का मिलान
निम्नलिखित क्वेरी को चलाने से दी गई तालिका में प्रत्येक कॉलम के बारे में जानकारी मिलती है। इसमें मिलान जानकारी शामिल है।
SHOW FULL COLUMNS FROM Artists;
इसका परिणाम यह होता है कि बहुत सारे कॉलम कॉलम के बारे में सभी प्रकार की जानकारी के साथ लौटाए जाते हैं, जिसमें कॉलेशन भी शामिल है।
आप ऐसा करके लौटाए गए कॉलम की संख्या कम कर सकते हैं:
SELECT column_name, character_set_name, collation_name FROM information_schema.columns WHERE table_name = 'Artists';
उदाहरण परिणाम:
+-------------+--------------------+-----------------+ | COLUMN_NAME | CHARACTER_SET_NAME | COLLATION_NAME | +-------------+--------------------+-----------------+ | ArtistId | NULL | NULL | | ArtistName | utf8 | utf8_spanish_ci | | ActiveFrom | NULL | NULL | +-------------+--------------------+-----------------+
आप SHOW CREATE TABLE
भी चला सकते हैं तालिका की परिभाषा प्रदर्शित करने के लिए कथन (जिसमें इसके कॉलम शामिल हैं)।
SHOW CREATE TABLE Artists;
यह कुछ इस तरह लौटाता है:
+---------+--------------------------------+ | 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 | +---------+--------------------------------+
हालाँकि, वर्ण सेट और संयोजन जानकारी केवल तभी दी जाती है जब वे तालिका के डिफ़ॉल्ट संयोजन से भिन्न हों। इस उदाहरण में, मैंने स्पष्ट रूप से ArtistName
. सेट किया है केवल प्रदर्शन उद्देश्यों के लिए एक अलग कोलाज के लिए कॉलम (अन्यथा कोलेशन जानकारी वापस नहीं की जाती)।