परिचय: MySQL में collation का सवाल सिर्फ एक शौक क्यों नहीं है
\nजिसने भी कभी PHP प्रोजेक्ट के लिए डेटाबेस सेट किया है, उसने यह सवाल जरूर पूछा होगा: "कौन सी collation (तुलना/सॉर्टिंग) चुनूं?" Stack Overflow पर इस सवाल के हज़ारों व्यूज़ हैं, और इसके जवाब अक्सर शुरुआती लोगों को भ्रमित करते हैं। पहली नज़र में लगता है कि कोई फर्क नहीं है - बस काम करना चाहिए। लेकिन असल में, collation का चुनाव सर्च की स्पीड, सॉर्टिंग की सटीकता (खासकर हिंदी भाषा के साथ) और यहां तक कि स्पेशल कैरेक्टर के प्रदर्शन को भी प्रभावित करता है।
\nइस ट्यूटोरियल में हम समझेंगे कि 2025 में MySQL के साथ PHP के लिए सबसे अच्छी collation कौन सी है और क्यों। आप जानेंगे कि क्लासिक गलतियों से कैसे बचें और डेटाबेस को इस तरह सेट करें कि आपकी साइट तेज़ चले और डेटा खराब न हो।
\n\nसरल शब्दों में collation क्या है?
\nCollation (तुलना) नियमों का एक सेट है जिसके द्वारा MySQL स्ट्रिंग्स की तुलना और सॉर्ट करता है। यह एन्कोडिंग (charset) से गहराई से जुड़ा है। अगर एन्कोडिंग (जैसे utf8mb4) यह तय करती है कि कैरेक्टर कैसे स्टोर होंगे, तो collation यह तय करता है कि उनकी तुलना कैसे होगी: क्या केस मायने रखता है, 'क' और 'का' को कैसे सॉर्ट करना है, क्या 'A' और 'a' को समान मानना है।
utf8mb4 के लिए मुख्य collation प्रकार:
- \n
- utf8mb4_general_ci — पुराना, तेज़, लेकिन सरलीकृत सॉर्टिंग (कुछ भाषाओं को हमेशा सही ढंग से हैंडल नहीं करता)। \n
- utf8mb4_unicode_ci — अधिक सटीक, Unicode मानक पर आधारित, लेकिन MySQL 8.0 से पहले धीमा था। \n
- utf8mb4_0900_ai_ci — सबसे नया (MySQL 8.0+), सबसे सटीक और सबसे तेज़। \n
पुरानी collation का उपयोग क्यों नहीं करना चाहिए?
\nकई पुराने प्रोजेक्ट आज भी utf8_general_ci या latin1_swedish_ci पर चल रहे हैं। अगर आप PHP में नया प्रोजेक्ट लिख रहे हैं, तो उनसे बचें। इसके कारण:
- \n
- हिंदी भाषा की समस्याएं: 'क' और 'का' गलत तरीके से सॉर्ट हो सकते हैं। \n
- सीमित कैरेक्टर सेट: पुरानी एन्कोडिंग इमोजी और दुर्लभ कैरेक्टर को सपोर्ट नहीं करतीं। \n
- प्रदर्शन: आधुनिक collation ऑप्टिमाइज़्ड हैं और तेज़ी से काम करते हैं। \n
2025 में सबसे अच्छी collation: utf8mb4_0900_ai_ci
\nअगर आपका MySQL वर्शन 8.0 या उससे ऊपर है (जो अब ज़्यादातर के पास है), तो सबसे अच्छा विकल्प है utf8mb4_0900_ai_ci। इसका मतलब:
\n- \n
- utf8mb4 — एन्कोडिंग जो प्रति कैरेक्टर 4 बाइट सपोर्ट करती है (इमोजी, दुर्लभ चित्रलिपि)। \n
- 0900 — Unicode 9.0 मानक पर आधारित (सबसे नवीनतम वर्शन)। \n
- ai — accent insensitive (उच्चारण के प्रति असंवेदनशील: 'café' और 'cafe' समान हैं)। \n
- ci — case insensitive (केस असंवेदनशील: 'Hello' और 'hello' समान हैं)। \n
यह collation अधिकतम सटीकता और गति प्रदान करता है। अगर आपको केस या उच्चारण में अंतर करना है, तो utf8mb4_0900_as_cs का उपयोग करें, लेकिन 99% वेब प्रोजेक्ट्स के लिए ai_ci आदर्श है।
अगर मेरे पास MySQL 5.7 या उससे नीचे है तो?
\nतो आपका विकल्प है utf8mb4_unicode_520_ci (या सिर्फ utf8mb4_unicode_ci)। यह 0900 जितनी तेज़ नहीं है, लेकिन general_ci से कहीं अधिक सटीक है। अगर आपके पास पुराना वर्शन है - तुरंत अपडेट करें, लेकिन तब तक utf8mb4_unicode_ci का उपयोग करें।
PHP प्रोजेक्ट में collation सेट करने की चरण-दर-चरण गाइड
\nआइए डेटाबेस को सही तरीके से सेट करें। मैं PDO का उदाहरण दिखाऊंगा - MySQL के साथ PHP में काम करने का आधुनिक और सुरक्षित तरीका।
\n\nचरण 1. सही collation के साथ डेटाबेस बनाना
\nयह SQL क्वेरी चलाएं (phpMyAdmin या कंसोल के माध्यम से):
\nCREATE DATABASE my_database\n CHARACTER SET utf8mb4\n COLLATE utf8mb4_0900_ai_ci;\n\nचरण 2. PHP (PDO) में कनेक्शन सेट करना
\nडेटाबेस से कनेक्ट करते समय, एन्कोडिंग ज़रूर निर्दिष्ट करें: