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

Django में यूनिकोड स्ट्रिंग को सहेजते समय MySQL गलत स्ट्रिंग मान त्रुटि

इनमें से किसी भी उत्तर ने मेरे लिए समस्या का समाधान नहीं किया। इसका मूल कारण है:

आप utf-8 वर्ण सेट के साथ MySQL में 4-बाइट वर्णों को संग्रहीत नहीं कर सकते।

MySQL में utf-8 वर्णों पर 3 बाइट की सीमा है (हां, यह बेकार है, यहां एक Django डेवलपर द्वारा अच्छी तरह से सारांशित किया गया है )

इसे हल करने के लिए आपको चाहिए:

  1. utf8mb4 वर्ण सेट (केवल MySQL 5.5 से उपलब्ध)
  2. अपनी Django सेटिंग फ़ाइल में वर्णसेट को नीचे बताए अनुसार निर्दिष्ट करें:

सेटिंग्स.py

DATABASES = {
    'default': {
        'ENGINE':'django.db.backends.mysql',
        ...
        'OPTIONS': {'charset': 'utf8mb4'},
    }
}

नोट:अपना डेटाबेस बनाते समय आप 'निर्दिष्ट कुंजी बहुत लंबी थी में चल सकते हैं ' मुद्दा।

सबसे संभावित कारण CharField . है जिसकी अधिकतम लंबाई 255 है और उस पर किसी प्रकार की अनुक्रमणिका है (उदा। अद्वितीय)। चूंकि utf8mb4 utf-8 की तुलना में 33% अधिक स्थान का उपयोग करता है, इसलिए आपको इन क्षेत्रों को 33% छोटा बनाना होगा।

इस मामले में, max_length को 255 से 191 में बदलें।

वैकल्पिक रूप से आप इस प्रतिबंध को हटाने के लिए अपने MySQL कॉन्फ़िगरेशन को संपादित कर सकते हैं लेकिन कुछ django हैकरी के बिना नहीं

अद्यतन करें: मैं बस फिर से इस मुद्दे में भाग गया और PostgreSQL पर स्विच करना समाप्त कर दिया। क्योंकि मैं अपना VARCHAR कम करने में असमर्थ था 191 वर्णों तक।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP MySQL में छवियों को स्टोर करने के लिए या नहीं?

  2. JSON_DEPTH () - MySQL में JSON दस्तावेज़ की अधिकतम गहराई का पता लगाएं

  3. DATE या DATETIME के ​​लिए डिफ़ॉल्ट मान सेट करते समय MySQL में त्रुटि

  4. MySQL में बाइनरी डेटा

  5. Ubuntu 9.10 (कर्मिक) पर phpMyAdmin के साथ MySQL प्रबंधित करें