वर्ण एन्कोडिंग, समय क्षेत्र की तरह, समस्याओं का एक निरंतर स्रोत है।
आप क्या कर सकते हैं किसी भी "उच्च-ASCII" वर्णों की तलाश करें क्योंकि ये या तो LATIN1 उच्चारण वर्ण या प्रतीक हैं, या UTF-8 बहु-बाइट वर्ण के पहले हैं। अंतर बताना तब तक आसान नहीं होगा जब तक आप थोड़ा सा भी धोखा नहीं देते।
यह पता लगाने के लिए कि कौन सी एन्कोडिंग सही है, आप बस SELECT
दो अलग-अलग संस्करण और नेत्रहीन तुलना करें। यहां एक उदाहरण दिया गया है:
SELECT CONVERT(CONVERT(name USING BINARY) USING latin1) AS latin1,
CONVERT(CONVERT(name USING BINARY) USING utf8) AS utf8
FROM users
WHERE CONVERT(name USING BINARY) RLIKE CONCAT('[', UNHEX('80'), '-', UNHEX('FF'), ']')
इसे असामान्य रूप से जटिल बना दिया गया है क्योंकि ऐसा लगता है कि MySQL regexp इंजन \x80
. जैसी चीज़ों को नज़रअंदाज़ कर देता है और UNHEX()
. का उपयोग करना आवश्यक बनाता है इसके बजाय विधि।
यह इस तरह के परिणाम उत्पन्न करता है:
latin1 utf8
----------------------------------------
Björn Björn