sql >> Base de Datos >  >> RDS >> Mysql

No se puede inicializar el conjunto de caracteres utf8mb4 con Windows mysql-python

Considere la siguiente lista de verificación:

  1. ¿Revisó su archivo de configuración de MySQL (/etc/my. cnf) ? Debería ser:

    [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
    

    Y puedes verificarlos a través de:

    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)
    

    -gracias a publicación de blog de Mathias

  2. Haga cumplir UTF-8 para ser utilizado entre Python y 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. Consejo oficial de MySQL con respecto a Can't initialize character set :

    Este error puede tener cualquiera de las siguientes causas:

    • El juego de caracteres es un juego de caracteres multibyte y no tiene soporte para el juego de caracteres en el cliente. En este caso, debe volver a compilar el cliente ejecutando CMake con -DDEFAULT_CHARSET=charset_name o -DWITH_EXTRA_CHARSETS=charset_name opción. Consulte la Sección 2.9.4, “Configuración de origen de MySQL Opciones” .

    • Todos los binarios estándar de MySQL se compilan con -DWITH_EXTRA_CHARSETS=complex , que habilita la compatibilidad con todos los juegos de caracteres multibyte. Consulte la Sección 2.9.4, “Configuración de origen de MySQL Opciones” .

    • El juego de caracteres es un juego de caracteres simple que no está compilado en mysqld, y los archivos de definición del juego de caracteres no están en el lugar donde el cliente espera encontrarlos.

      En este caso, debe usar uno de los siguientes métodos para resolver el problema:

      • Vuelva a compilar el cliente con soporte para el conjunto de caracteres. Consulte la Sección 2.9.4, “Configuración de origen de MySQL Opciones” .

      • Especifique al cliente el directorio donde se encuentran los archivos de definición del juego de caracteres. Para muchos clientes, puede hacer esto con --character-sets-dir opción.

      • Copie los archivos de definición de caracteres en la ruta donde el cliente espera que estén.