मैंने अभी-अभी Google के साथ बातचीत की और हमारे उदाहरण के लिए सब कुछ काम कर रहा है!
Django में काम कर रहे utf8mb4 को प्राप्त करने का मानक तरीका यह है कि इसे सेटिंग्स में DATABASES ['डिफ़ॉल्ट'] ['विकल्प'] के रूप में निर्दिष्ट किया जाए, जैसे:
'OPTIONS': {'charset': 'utf8mb4'},
यह ऐप इंजन में एक ऑपरेशनल एरर का कारण बनता है, MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5 पर; जिसका स्पष्ट रूप से अर्थ है कि Google जिस MySQL C क्लाइंट के विरुद्ध संकलन कर रहा है, उसमें utf8mb4 वर्ण सेट नहीं है।
इस विकल्प सेटिंग को हटा दें।
समाधान मैन्युअल रूप से SET NAMES को कॉल करना है; lib/django/db/backends/mysql/base.py संपादित करें और एक conn.query("SET NAMES utf8mb4") लाइन को DatabaseWrapper.get_new_connection में जोड़ें, तो यह इस तरह दिखता है:
def get_new_connection(self, conn_params):
conn = Database.connect(**conn_params)
conn.encoders[SafeText] = conn.encoders[six.text_type]
conn.encoders[SafeBytes] = conn.encoders[bytes]
conn.query("SET NAMES utf8mb4")
return conn
सुनिश्चित करें कि आपके पास बैकएंड पर utf8mb4 भी सक्षम है। App Engine Django ट्यूटोरियल में माइग्रेशन कमांड का परिणाम utf8 के लिए कॉन्फ़िगर किए गए Cloud SQL इंस्टेंस में होता है। मुझे दो तालिकाओं पर utf8mb4 को सक्षम करने के लिए इन आदेशों को चलाने की आवश्यकता है:
ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;