Cách cấu hình bộ ký tự toàn cầu trên MySQL


12

Tôi đã cố gắng thay đổi bộ ký tự cho MySQL của chúng tôi thông qua my.cnf và nó đã thất bại. Tôi đã thêm các cài đặt bộ ký tự được liệt kê dưới đây:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

Khi tôi kích hoạt chúng, MySQL không khởi động được. Làm cách nào tôi có thể đảm bảo mọi thứ mặc định là utf8 - luôn luôn?

Cập nhật

Vẫn còn một vài nơi có vấn đề trong việc trở thành UTF8

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Thật không may, tôi vẫn chưa nghĩ ra một soluton ... có ý tưởng nào không?

Hiện tại tôi đang sử dụng cấu hình này thành công:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

Nhưng PHPMyAdmin vẫn hiển thị một số latin1

character_set_client    utf8
character_set_connection    utf8
character_set_database  latin1
character_set_filesystem    binary
character_set_results   utf8
character_set_server    latin1
character_set_system    utf8
character_sets_dir  /usr/share/mysql/charsets/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

Câu trả lời:


23

Bạn cần kết hợp những điều sau vào tập tin my.cnf của bạn

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

Bạn có thể tìm thêm thông tin trên các trang hướng dẫn sau

Đáp lại câu trả lời của Mark, nếu bạn cần chuyển đổi các bảng / cơ sở dữ liệu hiện có thành bộ ký tự chính xác, bạn sẽ cần một ALTERtruy vấn phù hợp . Một cái gì đó tương tự như dưới đây:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Ngoài ra, có một đoạn mã PHP tuyệt vời ở đây , nó dành cho bạn.


Tôi đã làm theo hướng dẫn của bạn và kiểm tra các liên kết tài liệu ... vẫn còn một số vấn đề (xem ^)

Bất cứ khi nào tôi thêm collation-server = utf8_general_civào mysqldphần mysql không khởi động lại

Bạn có thể xem những gì trong tệp nhật ký? Nó sẽ cung cấp cho bạn một thông báo lỗi về lý do tại sao nó thất bại. Tôi lấy nó mysqld của bạn đã được biên dịch với bộ ký tự chung utf8 bao gồm?

Có tôi nghĩ đó là ... tệp nhật ký nào?

1
Hoạt động với tôi (Debian 8, MySQL 5.5), ngoại trừ default-character-set = utf8dòng dưới [mysqld]phần. Việc thêm dòng này dẫn đến kết quả là mysqld sẽ mất mãi mãi để khởi động lại. Hỗ trợ Unicode, tuy nhiên, hoạt động rất tốt ngay cả khi không có dòng này.
Bass

2

Câu trả lời của Ben là ổn, nhưng việc thay đổi cài đặt sẽ TUYỆT ĐỐI KHÔNG thay đổi bộ ký tự hoặc bộ sưu tập bảng hiện có. Làm điều đó với một câu lệnh ALTER TABLE thích hợp.

Lưu ý rằng nếu bạn không chỉ định nó, các bảng được tạo trong bộ ký tự mặc định của cơ sở dữ liệu. Đây là cài đặt trên mỗi cơ sở dữ liệu có thể được điều chỉnh bằng ALTER DATABASE. Điều này cũng không được thiết lập trong my.cnf.


1
Cơ sở dữ liệu mới sẽ kế thừa các thiết lập mysql mặc định, phải không?
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.