Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không thể sử dụng bộ ký tự utf8mb4 với CloudSQL trên AppEngine Python

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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chỉ số PostgreSQL và Chỉ số InnoDB - Hiểu sự khác biệt

  2. Chọn các hàng từ bảng MySQL có dấu thời gian PHP cũ hơn X

  3. Tại sao STRAIGHT_JOIN lại cải thiện đáng kể truy vấn này và nó có ý nghĩa gì khi nó được viết sau từ khóa SELECT?

  4. Neo4j - Xóa mối quan hệ bằng Cypher

  5. PHP và MySQL:Thứ tự theo ngày gần đây nhất và giới hạn 10