Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL में कैरेक्टर सेट और कॉलेशन को समझना

यदि आपने कभी MySQL के साथ काम किया है, तो आप अनिवार्य रूप से चरित्र सेट और कोलाज में आए हैं। इस ब्लॉग पोस्ट में, हम आपको उन दोनों के बारे में अधिक गहराई से देखने की कोशिश करेंगे और आपको उनका उपयोग कैसे करना चाहिए।

चरित्र सेट और संयोजन क्या हैं?

सीधे शब्दों में कहें, MySQL में कैरेक्टर सेट प्रतीकों और एनकोडिंग के सेट हैं - कोलाज एक कैरेक्टर सेट में कैरेक्टर की तुलना करने के लिए नियमों के सेट हैं। दूसरे शब्दों में, वर्ण सेट वर्णों के सेट होते हैं जो एक स्ट्रिंग में कानूनी होते हैं, जबकि कोलाज एक विशेष वर्ण सेट में वर्णों की तुलना करने के लिए उपयोग किए जाने वाले नियमों का एक समूह होता है। जिस तरह प्रत्येक वर्ण सेट में एक डिफ़ॉल्ट संयोजन होता है, वैसे ही वर्ण सेट में कई संयोजन भी हो सकते हैं। MySQL में सर्वर के लिए और प्रत्येक डेटाबेस और तालिका के लिए भी एक डिफ़ॉल्ट वर्ण सेट और संयोजन है।

MySQL में कैरेक्टर सेट

सामान्य तौर पर, MySQL में कैरेक्टर सेट इस तरह काम करते हैं:

  • जब एक डेटाबेस बनाया जाता है, तो कैरेक्टर सेट सर्वर-वाइड कैरेक्टर_सेट_सर्वर वेरिएबल से प्राप्त होते हैं।
  • जब एक टेबल बनाई जाती है, तो कैरेक्टर सेट डेटाबेस से व्युत्पन्न होते हैं।
  • जब एक कॉलम बनाया जाता है, तो कैरेक्टर सेट टेबल से व्युत्पन्न होते हैं।

जहां तक ​​कैरेक्टर सेट का सवाल है, कुछ वेरिएबल हैं जिन पर आपको नजर रखनी चाहिए:

  • Character_set_client उस कैरेक्टर सेट को परिभाषित करता है जिसमें क्लाइंट द्वारा स्टेटमेंट भेजे जाते हैं।
  • Character_set_connection कैरेक्टर सेट को परिभाषित करता है जिसमें क्लाइंट से एक सर्वर द्वारा स्टेटमेंट प्राप्त करने के बाद स्टेटमेंट्स का अनुवाद किया जाता है।
  • Character_set_results उस वर्ण सेट को परिभाषित करता है जिसमें सर्वर क्लाइंट को क्वेरी परिणाम देता है।

इन तीन सेटिंग्स को SET NAMES या SET CHARACTER SET स्टेटमेंट का उपयोग करके, या यहां तक ​​कि MySQL कॉन्फ़िगरेशन फ़ाइलों में भी बदला जा सकता है।

चरित्र सेट के साथ काम करते समय कभी-कभी आपको एक त्रुटि भी मिल सकती है #1267:

ERROR 1267 (HY000): Illegal mix of collations.

उपरोक्त त्रुटि आम तौर पर दो स्ट्रिंग्स की तुलना करने के कारण होती है जिनमें असंगत कोलाज होते हैं या एक संयुक्त कॉलम में एक अलग कॉलेशन वाले डेटा का चयन करने का प्रयास करते हैं। त्रुटि दिखाई जाती है क्योंकि जब MySQL दो मानों की तुलना अलग-अलग वर्ण सेट के साथ करता है, तो उसे तुलना के लिए उन्हें एक ही वर्ण सेट में परिवर्तित करना होगा, लेकिन वर्ण सेट संगत नहीं हैं। इस समस्या को हल करने के लिए, सुनिश्चित करें कि प्रत्येक तालिका और उनके कॉलम के कोलाज समान हैं।

MySQL में कोलाज

जैसा कि पहले ही ऊपर उल्लेख किया गया है, कोलाज चरित्र सेट से निकटता से संबंधित हैं क्योंकि एक संयोजन नियमों का एक सेट है जो परिभाषित करता है कि कैसे चरित्र स्ट्रिंग की तुलना और सॉर्ट करना है। प्रत्येक वर्ण सेट में कम से कम एक संयोजन होता है, कुछ में अधिक भी होता है।

हालांकि हम इस ब्लॉग पोस्ट में MySQL से संबंधित सभी चीजों के संयोजन के विवरण में नहीं जाएंगे, कुछ चीजें हैं जिन्हें आपको जानना चाहिए:

  • यदि आप MySQL 5.7 का उपयोग कर रहे हैं, तो डिफ़ॉल्ट MySQL संयोजन आमतौर पर latin1_swedish_ci होता है क्योंकि MySQL अपने डिफ़ॉल्ट वर्ण सेट के रूप में latin1 का उपयोग करता है। यदि आप MySQL 8.0 का उपयोग कर रहे हैं, तो डिफ़ॉल्ट वर्णसेट utf8mb4 है।
  • यदि आप अपने संयोजन के रूप में UTF-8 का उपयोग करना चुनते हैं, तो हमेशा utf8mb4 (विशेष रूप से utf8mb4_unicode_ci) का उपयोग करें। आपको UTF-8 का उपयोग नहीं करना चाहिए क्योंकि MySQL का UTF-8 उचित UTF-8 एन्कोडिंग से अलग है। ऐसा इसलिए है क्योंकि यह पूर्ण यूनिकोड समर्थन प्रदान नहीं करता है जिससे डेटा हानि या सुरक्षा समस्याएं हो सकती हैं। ध्यान रखें कि utf8mb4_general_ci छँटाई नियमों का एक सरलीकृत सेट है जो गति को बेहतर बनाने के लिए डिज़ाइन किए गए शॉर्टकट लेता है जबकि utf8mb4_unicode_ci भाषाओं की एक विस्तृत श्रृंखला में सटीक रूप से सॉर्ट करता है। सामान्य तौर पर, utf8mb4 "सबसे सुरक्षित" वर्ण सेट है क्योंकि यह 4-बाइट यूनिकोड का भी समर्थन करता है जबकि utf8 केवल 3 तक का समर्थन करता है।

एक अच्छा चरित्र सेट और संयोजन चुनना

अपने MySQL डेटा सेट के लिए एक अच्छा संयोजन और वर्ण सेट चुनने के लिए, इसे सरल रखना याद रखें। विभिन्न वर्ण सेट और (या) कोलाज का मिश्रण एक वास्तविक गड़बड़ हो सकता है क्योंकि वे बहुत भ्रमित हो सकते हैं (उदाहरण के लिए, कुछ वर्ण प्रकट होने तक सब कुछ ठीक काम कर सकता है, आदि) इसलिए अपनी आवश्यकताओं का पहले से मूल्यांकन करना और सबसे अच्छा चुनना सबसे अच्छा है। संयोजन और चरित्र सेट अपफ्रंट। MySQL में कुछ मूल्यवान प्रश्न भी हैं जो आपको ऐसा करने में मदद कर सकते हैं, उदाहरण के लिए, 

SELECT * FROM information_schema.CHARACTER_SETS ORDER BY CHARACTER_SET_NAME;

उनके विवरण के साथ वर्ण सेट और उपलब्ध कोलाज की एक सूची लौटाएगा जो आपके डेटाबेस डिज़ाइन की योजना बनाते समय अत्यंत उपयोगी हो सकता है।

ध्यान रखें कि कुछ वर्ण सेटों में अधिक CPU संचालन की आवश्यकता हो सकती है, साथ ही वे अधिक संग्रहण स्थान का उपभोग कर सकते हैं। गलत कैरेक्टर सेट का उपयोग करना इंडेक्सिंग को भी हरा सकता है - उदाहरण के लिए, MySQL को कैरेक्टर सेट को कन्वर्ट करना पड़ता है ताकि वह उनकी तुलना कर सके जब वे समान न हों:रूपांतरण इंडेक्स का उपयोग करना असंभव बना सकता है।

साथ ही, ध्यान रखें कि कुछ लोग "विश्व स्तर पर यूटीएफ -8 का उपयोग करने की सलाह देते हैं" - यह जरूरी नहीं कि एक अच्छा विचार हो क्योंकि कई अनुप्रयोगों को यूटीएफ -8 की बिल्कुल भी आवश्यकता नहीं होती है और, आपके डेटा पर, UTF-8 इसके लायक से अधिक परेशानी पैदा कर सकता है (उदाहरण के लिए, यह डिस्क पर बहुत अधिक संग्रहण स्थान का उपयोग कर सकता है), इसलिए बुद्धिमानी से चुनें।

सारांश

चरित्र सेट और संयोजन आपके मित्र या आपके बुरे सपने में से एक हो सकते हैं - यह सब इस बात पर निर्भर करता है कि आप उनका उपयोग कैसे करते हैं। सामान्य तौर पर, ध्यान रखें कि एक "अच्छा" वर्ण सेट और संयोजन आपके डेटाबेस के डेटा पर निर्भर करता है - MySQL कुछ प्रश्न प्रदान करता है जो आपको यह तय करने में मदद करता है कि क्या उपयोग करना है, लेकिन आपके चरित्र सेट और संयोजन प्रभावी होने के लिए आपको यह भी सोचना चाहिए इस बारे में कि कब एक निश्चित संयोजन का उपयोग करना समझ में आता है और क्यों।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL सेल्फ-जॉइन कैसे काम करता है?

  2. PHP में परिणाम सरणी लाने के लिए मैं पीडीओ का उपयोग कैसे कर सकता हूं?

  3. डुप्लिकेट कुंजी पर ध्यान न दें?

  4. मैं MySQL में एकाधिक कॉलम के लिए अद्वितीय बाधा कैसे निर्दिष्ट करूं?

  5. डेटा एक्सप्लोरेशन के लिए मेटाबेस को MySQL से कनेक्ट करें