बुरी खबर। लेकिन पहले, दोबारा जांच लें:
SELECT col, HEX(col)...
यह देखने के लिए कि तालिका में क्या है। यदि हेक्स 3F
. दिखाता है , तो डेटा चला गया है। सही ढंग से संग्रहित, dal
वर्ण हेक्स D8AF
. होना चाहिए; hah
हेक्स है D8AD
।
क्या हुआ:
- आपके पास utf8-एन्कोडेड डेटा (अच्छा) था
SET NAMES latin1
प्रभावी था (डिफ़ॉल्ट, लेकिन गलत)- स्तंभ घोषित किया गया था
CHARACTER SET latin1
(डिफ़ॉल्ट, लेकिन गलत)
जैसे ही आपने INSERTed
डेटा, इसे लैटिन 1 में बदल दिया गया था, जिसमें फ़ारसी वर्णों के लिए कोई मान नहीं है, इसलिए प्रश्न चिह्नों ने उन्हें बदल दिया।
इलाज (भविष्य के लिए `INSERTs):
- बहिष्कृत mysql_* इंटरफ़ेस के बजाय mysqli_* इंटरफ़ेस का उपयोग करके अपने एप्लिकेशन को रीकोड करें।
- utf8-एन्कोडेड डेटा (अच्छा)
- mysqli_set_charset('utf8')
- जांचें कि कॉलम और/या टेबल डिफ़ॉल्ट हैं
CHARACTER SET utf8
- यदि आप वेब पेज पर प्रदर्शित कर रहे हैं,
<meta...utf8>
शीर्ष के पास होना चाहिए।
ऊपर चर्चा CHARACTER SET
. के बारे में है , वर्णों की एन्कोडिंग। अब COLLATION
. पर टिप के लिए , जिसका उपयोग तुलना और छँटाई के लिए किया जाता है।
यदि आप चाहते हैं कि इनके साथ समान व्यवहार किया जाए:'بِسْمِ' ='بسم', तो COLLATION
के लिए utf8_unicode_ci (utf8_general_ci के बजाय) का उपयोग करें ।