Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Nie można użyć zestawu znaków utf8mb4 z CloudSQL w AppEngine Python

Właśnie rozmawiałem z Google i wszystko działało dla naszej instancji!

Standardowym sposobem na uruchomienie utf8mb4 w Django jest określenie go jako BAZY DANYCH['default']['OPCJE'] w settings.py, w ten sposób:

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

Powoduje to wystąpienie OperationalError w App Engine w MySQLdb 1.2.4b4 / 1.2.4 / 1.2.5; co najwyraźniej oznacza, że ​​klient MySQL C, z którym Google się kompiluje, nie ma zestawu znaków utf8mb4.

Usuń to ustawienie OPTIONS.

Rozwiązaniem jest ręczne wywołanie SET NAMES; edytuj lib/django/db/backends/mysql/base.py i dodaj linię conn.query("SET NAMES utf8mb4") do DatabaseWrapper.get_new_connection, więc wygląda to tak:

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

Upewnij się, że masz również włączone utf8mb4 na zapleczu. Polecenia migracji w samouczku App Engine Django powodują, że instancja Cloud SQL jest skonfigurowana do obsługi utf8. Musiałem uruchomić te polecenia, aby włączyć utf8mb4 na dwóch tabelach:

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. Upłynął limit czasu pgadmin Nie można połączyć się z serwerem

  2. Czy istnieje różnica w używaniu INT(1) vs TINYINT(1) w MySQL?

  3. Po uruchomieniu sonar-runer wyrzuć wyjątek:Spowodowany przez:Nieznany stan bazy danych:FRESH_INSTALL

  4. dbWriteTable(..., append =T) jest nadpisywany w R

  5. Porównanie rozwiązań do replikacji Oracle i MySQL