Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Der Zeichensatz utf8mb4 kann nicht mit Windows mysql-python initialisiert werden

Betrachten Sie die folgende Checkliste:

  1. Haben Sie Ihre MySQL-Konfigurationsdatei (/etc/my. cnf) ? Es sollte sein:

    [client]
    default-character-set = utf8mb4
    
    [mysql]
    default-character-set = utf8mb4
    
    [mysqld]
    character-set-client-handshake = FALSE
    character-set-server = utf8mb4
    collation-server = utf8mb4_unicode_ci
    

    Und Sie können sie überprüfen über:

    mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
    +--------------------------+--------------------+
    | Variable_name            | Value              |
    +--------------------------+--------------------+
    | character_set_client     | utf8mb4            |
    | character_set_connection | utf8mb4            |
    | character_set_database   | utf8mb4            |
    | character_set_filesystem | binary             |
    | character_set_results    | utf8mb4            |
    | character_set_server     | utf8mb4            |
    | character_set_system     | utf8               |
    | collation_connection     | utf8mb4_unicode_ci |
    | collation_database       | utf8mb4_unicode_ci |
    | collation_server         | utf8mb4_unicode_ci |
    +--------------------------+--------------------+
    10 rows in set (0.00 sec)
    

    -Dank an Blogbeitrag von Mathias

  2. Erzwingen Sie die Verwendung von UTF-8 zwischen Python und MySQL:

    # Connect to mysql.
    dbc = MySQLdb.connect(host='###', user='###', passwd='###', db='###', use_unicode=True)
    
    # Create a cursor.
    cursor = dbc.cursor()
    
    # Enforce UTF-8 for the connection.
    cursor.execute('SET NAMES utf8mb4')
    cursor.execute("SET CHARACTER SET utf8mb4")
    cursor.execute("SET character_set_connection=utf8mb4")
    
    # Do database stuff.
    
    # Commit data.
    dbc.commit()
    
    # Close cursor and connection.
    cursor.close()
    dbc.close()
    
  3. Offizieller Tipp von MySQL bezüglich Can't initialize character set :

    Dieser Fehler kann folgende Ursachen haben:

    • Der Zeichensatz ist ein Multibyte-Zeichensatz und Sie haben keine Unterstützung für den Zeichensatz im Client. In diesem Fall müssen Sie den Client neu kompilieren, indem Sie CMake mit -DDEFAULT_CHARSET=charset_name ausführen oder -DWITH_EXTRA_CHARSETS=charset_name Möglichkeit. Siehe Abschnitt 2.9.4, „MySQL Source-Configuration Optionen“ .

    • Alle standardmäßigen MySQL-Binärdateien werden mit -DWITH_EXTRA_CHARSETS=complex kompiliert , wodurch die Unterstützung aller Multibyte-Zeichensätze aktiviert wird. Siehe Abschnitt 2.9.4, „MySQL Source-Configuration Optionen“ .

    • Der Zeichensatz ist ein einfacher Zeichensatz, der nicht in mysqld kompiliert ist, und die Zeichensatz-Definitionsdateien befinden sich nicht dort, wo der Client sie erwartet.

      In diesem Fall müssen Sie eine der folgenden Methoden anwenden, um das Problem zu lösen:

      • Kompilieren Sie den Client mit Unterstützung für den Zeichensatz neu. Siehe Abschnitt 2.9.4, „MySQL Source-Configuration Optionen“ .

      • Geben Sie dem Client das Verzeichnis an, in dem sich die Zeichensatzdefinitionsdateien befinden. Bei vielen Clients können Sie dies mit --character-sets-dir tun Option.

      • Kopieren Sie die Zeichendefinitionsdateien in den Pfad, in dem der Client sie erwartet.