Mysql
 sql >> Database >  >> RDS >> Mysql

Impossibile inizializzare il set di caratteri utf8mb4 con Windows mysql-python

Considera la seguente lista di controllo:

  1. Hai controllato il tuo file di configurazione MySQL (/etc/my. cf) ? Dovrebbe essere:

    [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
    

    E puoi verificarli tramite:

    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)
    

    -grazie al post del blog di Mathias

  2. Enfore, imporre l'utilizzo di UTF-8 tra Python e 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. Suggerimento ufficiale da MySQL riguardo a Can't initialize character set :

    Questo errore può avere una delle seguenti cause:

    • Il set di caratteri è un set di caratteri multibyte e non hai supporto per il set di caratteri nel client. In questo caso, devi ricompilare il client eseguendo CMake con il -DDEFAULT_CHARSET=charset_name o -DWITH_EXTRA_CHARSETS=charset_name opzione. Vedere la Sezione 2.9.4, "MySQL Source-Configuration Opzioni” .

    • Tutti i binari MySQL standard sono compilati con -DWITH_EXTRA_CHARSETS=complex , che abilita il supporto per tutti i set di caratteri multibyte. Vedere la Sezione 2.9.4, "MySQL Source-Configuration Opzioni” .

    • Il set di caratteri è un set di caratteri semplice che non viene compilato in mysqld e i file di definizione del set di caratteri non si trovano nel posto in cui il client si aspetta di trovarli.

      In questo caso, è necessario utilizzare uno dei seguenti metodi per risolvere il problema:

      • Ricompilare il client con il supporto per il set di caratteri. Vedere la Sezione 2.9.4, "MySQL Source-Configuration Opzioni” .

      • Specificare al client la directory in cui si trovano i file di definizione del set di caratteri. Per molti client, puoi farlo con --character-sets-dir opzione.

      • Copia i file di definizione dei caratteri nel percorso in cui il client si aspetta che siano.