Considere a seguinte lista de verificação:
-
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
-
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()
-
Dica oficial do MySQL sobreCan'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.
-
-