Hãy xem xét danh sách kiểm tra sau:
-
Bạn đã kiểm tra tệp cấu hình MySQL (/ etc / my) của mình không. cnf) ? Nó phải là:
[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
Và bạn có thể xác minh chúng qua:
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)
-cảm ơn bài đăng trên blog của Mathias
-
Trước khi thực thi UTF-8 được sử dụng giữa Python và 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()
-
Mẹo chính thức từ MySQL liên quan đến
Can't initialize character set
:Lỗi này có thể do bất kỳ nguyên nhân nào sau đây:
-
Bộ ký tự là một bộ ký tự nhiều byte và bạn không có hỗ trợ cho bộ ký tự trong ứng dụng khách. Trong trường hợp này, bạn cần phải biên dịch lại máy khách bằng cách chạy CMake với
-DDEFAULT_CHARSET=charset_name
hoặc-DWITH_EXTRA_CHARSETS=charset_name
quyền mua. Xem Phần 2.9.4, “Cấu hình nguồn MySQL Tùy chọn ” . -
Tất cả các tệp nhị phân MySQL tiêu chuẩn được biên dịch với -
DWITH_EXTRA_CHARSETS=complex
, cho phép hỗ trợ tất cả các bộ ký tự nhiều byte. Xem Phần 2.9.4, “Cấu hình nguồn MySQL Tùy chọn ” . -
Bộ ký tự là một bộ ký tự đơn giản không được biên dịch thành mysqld và các tệp định nghĩa bộ ký tự không ở nơi mà khách hàng mong đợi tìm thấy chúng.
Trong trường hợp này, bạn cần sử dụng một trong các phương pháp sau để giải quyết vấn đề:
-
Biên dịch lại ứng dụng khách với sự hỗ trợ cho bộ ký tự. Xem Phần 2.9.4, “Cấu hình nguồn MySQL Tùy chọn ” .
-
Chỉ định cho máy khách thư mục chứa các tệp định nghĩa bộ ký tự. Đối với nhiều ứng dụng khách, bạn có thể thực hiện việc này với
--character-sets-dir
tùy chọn. -
Sao chép các tệp định nghĩa ký tự vào đường dẫn mà khách hàng mong đợi chúng.
-
-