Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tidak dapat menggunakan kumpulan karakter utf8mb4 dengan CloudSQL di AppEngine Python

Saya baru saja mengobrol dengan google dan semuanya berfungsi untuk instance kami!

Cara standar agar utf8mb4 bekerja di Django adalah dengan menetapkannya sebagai DATABASES['default']['OPTIONS'] di settings.py, seperti ini:

'OPTIONS': {'charset': 'utf8mb4'},

Ini menyebabkan OperationalError di App Engine, di MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; yang tampaknya berarti bahwa klien MySQL C yang dikompilasi oleh google tidak memiliki set karakter utf8mb4.

Hapus setelan OPTIONS ini.

Solusinya adalah memanggil SET NAMES secara manual; edit lib/django/db/backends/mysql/base.py dan tambahkan baris conn.query("SET NAMES utf8mb4") ke dalam DatabaseWrapper.get_new_connection, sehingga terlihat seperti ini:

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

Pastikan Anda juga mengaktifkan utf8mb4 di backend. Perintah migrasi dalam tutorial App Engine Django menghasilkan instance Cloud SQL yang dikonfigurasi untuk utf8. Saya perlu menjalankan perintah ini untuk mengaktifkan utf8mb4 pada dua tabel:

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. Datetime terbaru dari indeks mysql unik

  2. Membuat pengguna di MySQL

  3. Tanggal saat ini dalam klausa MySQL WHERE

  4. pdo untuk mengambil data dan mengisi catatan

  5. Masalah koneksi MySQL Hibernate saat menggunakan c3p0