2012-05-01 7 views
5

से इमोटिकॉन्स मैं एक आईफोन ऐप से टिप्पणियों को सहेजने की कोशिश कर रहा हूं जो आज और अधिकतर में इमोटिकॉन्स शामिल हो सकता है। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, मैं इमोटिकॉन्स को MySQL डेटाबेस में सहेज नहीं सकता ... लगातार यूनिकोड त्रुटियां।आईफोन से पायथन/Django

  • अजगर 2.6.5
  • Django 1.2.1
  • MySQL डेटाबेस
  • एक VARCHAR (255) क्षेत्र
करने के लिए डेटा सहेजा जा रहा है (टेबल और पंक्तियों के लिए UTF8 वर्ण सेट करने के लिए सेट)

त्रुटि मैं प्राप्त रखना है:

Incorrect string value: '\xF0\x9F\x97\xBC \xF0...' for column 'body' at row 1 

strin जी मैं डेटाबेस में गुजर रहा हूँ है:

test_txt = u"Emoji - \U0001f5fc \U0001f60c \U0001f47b ...".encode('utf-8') 

अद्यतन: यहाँ मॉडल मैं उपयोग कर रहा हूँ है:

class ItemComment(db.Model): 
    item = db.ForeignKey(Item) 
    user = db.ForeignKey(Profile) 
    body = db.CharField(max_length=255, blank=True, null=True) 

    active = db.BooleanField(default=True) 
    date_added = db.DateTimeField(auto_now_add=True) 

    def __unicode__(self): 
    return "%s" % (self.item) 

अजीब बात यह है कि अगर मैं कोशिश करते हैं और एक क्षेत्र को यह पारित कि मैंने MySQL में बनाया है और Django models.py नहीं यह ठीक काम करता है। लेकिन जैसे ही मैं Django मॉडल में फ़ील्ड पंजीकृत करता हूं, यह मर जाता है। क्या इन्हें स्टोर करने का कोई और तरीका है?

कोई भी विचार अद्भुत होगा।
मैं इस बारे में अधिक अटक नहीं हो सकता है ...

अद्यतन 2: टर्मिनल में यह ट्रैकिंग निम्नलिखित अद्यतन बयान (U0001f5fc नोटिस)

UPDATE 'table' SET 'body' = '', WHERE 'table'.'id' = 1 ; args=(u'\U0001f5fc') 

कट्टर के रूप में उपयोग करते हुए का उपयोग कर के रूप में मैं प्राप्त कर सकते हैं

force_unicode(smart_str(value), encoding='utf-8', strings_only=False, errors='ignore') 

लेकिन त्रुटि अभी भी फेंकता है:

मूल्य पारित करने के लिए

पूरी तरह से खो गया !!!

चीयर्स, MySQL सर्वर के लिए चारसेट utf8mb4

+0

आप सका अपना मॉडल प्रदान करें? – bossylobster

+0

@ बॉसिलोबस्टर, चीयर्स, बस उपरोक्त प्रतिलिपि में मॉडल जोड़ा। –

+0

http://stackoverflow.com/questions/2108824/mysql-incorrect-string-value-error-when-save-unicode-string-in-django देखें, क्योंकि आपने कहा है कि यह MySQL में ठीक काम करता है मुझे संदेह है कि यह आशा करेगा , लेकिन यह एक कोशिश के लायक है। – bossylobster

उत्तर

5

बदलें (संस्करण 5.5.3 बाद में)

my.ini (my.cnf) में

[mysqld] 
character_set_server = utf8mb4 
collation-server = utf8mb4_unicode_ci 

या SQL क्वेरी

SET NAMES 'utf8mb4'; 

देखना http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html

या चरित्र को करने के लिए हटा देता है।

अजगर

import re 
# emoji_text is unicode 
no_emoji_text = re.sub('[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]', '', str(emoji_text)) 

धन्यवाद।

भी देखें MySQL throws Incorrect string value error

+0

यह भी वह समाधान है जिसका मैंने उपयोग किया था। अगर इससे मदद मिल सकती है तो मैंने एक लेख लिखा जहां मैंने अपनी समस्याओं की व्याख्या करने की कोशिश की, जो समान थे: http://pjambet.github.io/blog/emojis-and-mysql/ – pjam

0

मैं Django 1.11 का उपयोग करें और setting.py निम्नलिखित और sql बनाने इमोजी अच्छी तरह से स्टोर कर सकते हैं,

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db_name', 
     'USER': 'db_user', 
     'PASSWORD': 'your_password', 
     'OPTIONS': {'charset': 'utf8mb4'}, # note here!!! 
    } 
} 

sqlthis जवाब से आते हैं,

CREATE DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 
संबंधित मुद्दे