Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Não é possível inicializar o conjunto de caracteres utf8mb4 com o Windows mysql-python


Considere a seguinte lista de verificação:

  1. Você verificou seu arquivo de configuração MySQL (/etc/my. cnf) ? Deveria 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
    

    E você pode verificá-los 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)
    

    -graças a postagem do blog de Mathias

  2. Enfore impor UTF-8 a ser usado entre 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. Dica oficial do MySQL sobre Can't initialize character set :

    Este erro pode ter qualquer uma das seguintes causas:

    • O conjunto de caracteres é um conjunto de caracteres multibyte e você não tem suporte para o conjunto de caracteres no cliente. Nesse caso, você precisa recompilar o cliente executando o CMake com o -DDEFAULT_CHARSET=charset_name ou -DWITH_EXTRA_CHARSETS=charset_name opção. Consulte a Seção 2.9.4, "MySQL Source-Configuration Opções” .

    • Todos os binários padrão do MySQL são compilados com -DWITH_EXTRA_CHARSETS=complex , que habilita o suporte para todos os conjuntos de caracteres multibyte. Consulte a Seção 2.9.4, "MySQL Source-Configuration Opções” .

    • O conjunto de caracteres é um conjunto de caracteres simples que não é compilado no mysqld, e os arquivos de definição do conjunto de caracteres não estão no local onde o cliente espera encontrá-los.

      Nesse caso, você precisa usar um dos seguintes métodos para resolver o problema:

      • Recompile o cliente com suporte para o conjunto de caracteres. Consulte a Seção 2.9.4, "MySQL Source-Configuration Opções” .

      • Especifique para o cliente o diretório no qual os arquivos de definição do conjunto de caracteres estão localizados. Para muitos clientes, você pode fazer isso com o --character-sets-dir opção.

      • Copie os arquivos de definição de caracteres para o caminho onde o cliente espera que estejam.