Rozważ poniższą listę kontrolną:
-
Czy sprawdziłeś swój plik konfiguracyjny MySQL (/etc/my. cnf) ? Powinno być:
[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
Możesz je zweryfikować:
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)
-dzięki poście Mathiasa na blogu
-
Wymuszaj stosowanie UTF-8 między Pythonem a 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()
-
Oficjalna wskazówka od MySQL dotyczące
Can't initialize character set
:Ten błąd może mieć jedną z następujących przyczyn:
-
Zestaw znaków jest zestawem znaków wielobajtowych i nie masz obsługi zestawu znaków w kliencie. W takim przypadku musisz ponownie skompilować klienta, uruchamiając CMake z
-DDEFAULT_CHARSET=charset_name
lub-DWITH_EXTRA_CHARSETS=charset_name
opcja. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” . -
Wszystkie standardowe pliki binarne MySQL są kompilowane z opcją -
DWITH_EXTRA_CHARSETS=complex
, który umożliwia obsługę wszystkich zestawów znaków wielobajtowych. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” . -
Zestaw znaków to prosty zestaw znaków, który nie jest kompilowany do mysqld, a pliki definicji zestawu znaków nie znajdują się w miejscu, w którym klient spodziewa się je znaleźć.
W takim przypadku musisz użyć jednej z następujących metod, aby rozwiązać problem:
-
Ponownie skompiluj klienta z obsługą zestawu znaków. Zobacz sekcję 2.9.4, „Konfiguracja źródła MySQL Opcje” .
-
Podaj klientowi katalog, w którym znajdują się pliki definicji zestawu znaków. W przypadku wielu klientów możesz to zrobić za pomocą
--character-sets-dir
opcja. -
Skopiuj pliki definicji znaków do ścieżki, w której oczekuje ich klient.
-
-