Tôi vừa trò chuyện với google và mọi thứ đều hoạt động cho ví dụ của chúng tôi!
Cách tiêu chuẩn để utf8mb4 hoạt động trong Django là chỉ định nó là DATABASES ['default'] ['OPTIONS'] trong settings.py, như thế này:
'OPTIONS': {'charset': 'utf8mb4'},
Điều này gây ra lỗi OperationalError trong App Engine, trên MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; điều này rõ ràng có nghĩa là ứng dụng khách MySQL C mà google đang biên dịch đang thiếu bộ ký tự utf8mb4.
Xóa cài đặt TÙY CHỌN này.
Cách giải quyết là gọi SET NAMES theo cách thủ công; chỉnh sửa lib / django / db / backends / mysql / base.py và thêm dòng conn.query ("SET NAMES utf8mb4") vào DatabaseWrapper.get_new_connection, vì vậy nó trông giống như sau:
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
Đảm bảo rằng bạn cũng đã bật utf8mb4 trên chương trình phụ trợ. Các lệnh di chuyển trong hướng dẫn App Engine Django dẫn đến phiên bản Cloud SQL được định cấu hình cho utf8. Tôi cần chạy các lệnh này để bật utf8mb4 trên hai bảng:
ALTER TABLE polls_question CONVERT TO CHARACTER SET utf8mb4;
ALTER TABLE polls_choice CONVERT TO CHARACTER SET utf8mb4;