Overvej følgende tjekliste:
-
Har du tjekket din MySQL-konfigurationsfil (/etc/my. cnf) ? Det skal være:
[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
Og du kan bekræfte dem 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)
-tak til Mathias' blogindlæg
-
Gennemtving håndhæv UTF-8, der skal bruges mellem Python og 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()
-
Officielt tip fra MySQL vedrørende
Can't initialize character set
:Denne fejl kan have en af følgende årsager:
-
Tegnsættet er et multibyte tegnsæt, og du har ingen understøttelse af tegnsættet i klienten. I dette tilfælde skal du omkompilere klienten ved at køre CMake med
-DDEFAULT_CHARSET=charset_name
eller-DWITH_EXTRA_CHARSETS=charset_name
mulighed. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” . -
Alle standard MySQL binære filer er kompileret med -
DWITH_EXTRA_CHARSETS=complex
, som muliggør understøttelse af alle multibyte-tegnsæt. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” . -
Tegnsættet er et simpelt tegnsæt, der ikke er kompileret i mysqld, og tegnsættets definitionsfiler er ikke på det sted, hvor klienten forventer at finde dem.
I dette tilfælde skal du bruge en af følgende metoder til at løse problemet:
-
Genkompiler klienten med understøttelse af tegnsættet. Se afsnit 2.9.4, “MySQL Source-Configuration Valgmuligheder” .
-
Angiv til klienten den mappe, hvor tegnsætdefinitionsfilerne er placeret. For mange klienter kan du gøre dette med
--character-sets-dir
mulighed. -
Kopier tegndefinitionsfilerne til stien, hvor klienten forventer, at de er.
-
-