MySQL का डिफ़ॉल्ट संयोजन latin1_swedish_ci
है 8.0 से पहले
और utf8mb4_0900_ai_ci
8.0 के बाद से
. इसलिए गैर-बाइनरी स्ट्रिंग तुलनाएं सामान्य कॉलम में डिफ़ॉल्ट रूप से केस-असंवेदनशील होती हैं।
हालांकि, जैसा कि JSON प्रकार के लिए MySQL मैन्युअल में बताया गया है
इसलिए, आपका JSON मान utf8mb4_bin
. में है कोलेशन और तुलना केस को असंवेदनशील बनाने के लिए आपको किसी भी ऑपरेंड में केस असंवेदनशील कॉलेशन लागू करना होगा।
उदा.
WHERE username COLLATE XXX LIKE '...'
जहां XXX
एक utf8mb4 संयोजन होना चाहिए (जैसे utf8mb4_general_ci
आपने उल्लेख किया है।)
या
WHERE username LIKE '...' COLLATE YYY
जहां YYY
एक संयोजन होना चाहिए जो आपके कनेक्शन के वर्ण सेट से मेल खाता हो।
समानता तुलना के लिए, आपको JSON मान को अनकोट करें
JSON_UNQUOTE()
के साथ या अनकोटिंग एक्सट्रैक्शन ऑपरेटर ->>
उदा.
JSON_UNQUOTE(JSON_EXTRACT(payload, '$.username'))
या बस
payload->>'$.username'
JSON प्रकार और फ़ंक्शन सामान्य डेटा प्रकारों से भिन्न तरीके से कार्य करते हैं। ऐसा प्रतीत होता है कि आप इसके लिए नए हैं। इसलिए मेरा सुझाव है कि उत्पादन परिवेश में डालने से पहले मैनुअल को ध्यान से पढ़ें।