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

mysql-अजगर संयोजन समस्या:यूनिकोड डेटाटाइप को कैसे बल दें?

यह पता चला है कि समस्या बल्कि अजीब है। संक्षेप में, MySQL string datatypes MySQL के इंटरफ़ेस में एक अतिरिक्त BINARY ध्वज के साथ एकल डेटाटाइप पर मैप करें।

इस प्रकार, MySQL का VARCHAR , VARBINARY , और समान MySQLdb.constants.FIELD_TYPE.VAR_STRING के लिए एक स्ट्रिंग शाब्दिक मानचित्र कॉलम प्रकार परिभाषाओं में टाइप करें, लेकिन एक अतिरिक्त MySQLdb.constants.FLAG.BINARY फ्लैग करें जब टाइप VARBINARY . हो या एक स्ट्रिंग एक *_bin . से मेल खाती है मिलान।

हालांकि एक MySQLdb.constants.FIELD_TYPE.VARCHAR है प्रकार, मैं यह पता लगाने में विफल रहा कि इसका उपयोग कब किया जाता है। जैसा कि मैंने कहा, MySQL VARCHAR कॉलम FIELD_TYPE.VAR_STRING . पर मैप करता है ।

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

आधिकारिक docs के रूप में राज्य:

व्यवहार में, गधे में वास्तविक दर्द आपके स्वयं के कन्वर्टर्स डिक्शनरी के निर्माण की प्रक्रिया हो सकती है। लेकिन आप डिफ़ॉल्ट को MySQLdb.converters.conversions . से आयात कर सकते हैं और इसे पैच करें, या इसे कनेक्शन के उदाहरण पर पैच भी करें। ट्रिक यह है कि FLAG.BINARY . के लिए एक विशेष कनवर्टर को हटा दिया जाए ध्वजांकित करें और सभी मामलों के लिए एक डिकोडर जोड़ें। यदि आप स्पष्ट रूप से charset specify निर्दिष्ट करते हैं MySQLdb.connect के लिए पैरामीटर , यह use_unicode=1 . को बाध्य करता है पैरामीटर, जो आपके लिए डिकोडर जोड़ता है, लेकिन आप इसे स्वयं कर सकते हैं:

>>> con = MySQLdb.connect(**params)
>>> con.converter[FIELD_TYPE.VAR_STRING]
[(128, <type 'str'>), (None, <function string_decoder at 0x01FFA130>)]
>>> con.converter[FIELD_TYPE.VAR_STRING] = [(None, con.string_decoder)]
>>> c = con.cursor()
>>> c.execute("SELECT %s COLLATE utf8_bin", u'м')
1L
>>> c.fetchone()
(u'\u043c',)

संभवतः आपको FIELD_TYPE.STRING . के लिए भी यही हैक करने की आवश्यकता हो सकती है यदि आवश्यक हो।

एक अन्य उपाय स्पष्ट use_unicode=0 . पास करना है करने के लिए MySQLdb.connect और अपने कोड में सभी डिकोडिंग करें, लेकिन मैं नहीं करूंगा।

आशा है, यह किसी के लिए उपयोगी हो सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डोकर में मैसकल के साथ सीक्वल प्रो

  2. MYSQLI तैयार कथन कोई आउटपुट प्राप्त नहीं करता है

  3. मैं अपना MySQL लॉग कैसे शुरू और जांच सकता हूं?

  4. MySQL में पिवट टेबल प्रश्नों को स्वचालित कैसे करें

  5. Google क्लाउड SQL बिना किसी कारण के पूर्ण डिस्क तक आकार बढ़ा रहा है