Mysql
 sql >> Base de données >  >> RDS >> Mysql

Impossible d'initialiser le jeu de caractères utf8mb4 avec Windows mysql-python

Considérez la liste de contrôle suivante :

  1. Avez-vous vérifié votre fichier de configuration MySQL (/etc/my. cnf) ? Cela devrait être :

    [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
    

    Et vous pouvez les vérifier via :

    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)
    

    -merci au article de blog de Mathias

  2. Appliquez l'UTF-8 à utiliser entre Python et 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. Conseil officiel de MySQL concernant Can't initialize character set :

    Cette erreur peut avoir l'une des causes suivantes :

    • Le jeu de caractères est un jeu de caractères multi-octets et vous n'avez pas de support pour le jeu de caractères dans le client. Dans ce cas, vous devez recompiler le client en exécutant CMake avec le -DDEFAULT_CHARSET=charset_name ou -DWITH_EXTRA_CHARSETS=charset_name option. Voir la section 2.9.4, « ​​MySQL Source-Configuration options” .

    • Tous les binaires MySQL standard sont compilés avec -DWITH_EXTRA_CHARSETS=complex , qui permet la prise en charge de tous les jeux de caractères multioctets. Voir la section 2.9.4, « ​​MySQL Source-Configuration options” .

    • Le jeu de caractères est un jeu de caractères simple qui n'est pas compilé dans mysqld, et les fichiers de définition du jeu de caractères ne se trouvent pas à l'endroit où le client s'attend à les trouver.

      Dans ce cas, vous devez utiliser l'une des méthodes suivantes pour résoudre le problème :

      • Recompilez le client avec la prise en charge du jeu de caractères. Voir la section 2.9.4, « ​​MySQL Source-Configuration options” .

      • Indiquez au client le répertoire où se trouvent les fichiers de définition de jeu de caractères. Pour de nombreux clients, vous pouvez le faire avec le --character-sets-dir option.

      • Copiez les fichiers de définition de caractères dans le chemin où le client s'attend à ce qu'ils se trouvent.