Hãy suy nghĩ về nó:
- Bạn đang lưu trữ dữ liệu trong cơ sở dữ liệu như
latin1
- Bạn là dữ liệu được xử lý nội bộ bởi mysqld như
latin1
Nếu dữ liệu đến từ HĐH hoặc từ kết nối utf8
, mysqld sẽ xử lý nó như thế nào?
Thay vì đoán hoặc hy vọng điều tốt nhất, bạn có thể thay đổi hành vi của bộ ký tự đến. Ngoại trừ information_schema
và mysql
, lấy tất cả cơ sở dữ liệu của bạn và đặt bộ ký tự mặc định thành utf8
:
ALTER DATABASE dbname CHARACTER SET utf8;
Nếu bạn có một hợp đồng cụ thể để đi cùng với nó, hãy làm điều này:
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
Dưới đây là các bộ sưu tập để lựa chọn:
mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)
Bạn cũng có thể chạy
mysql> show collation where charset='utf8';
+--------------------+---------+-----+---------+----------+---------+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+--------------------+---------+-----+---------+----------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+---------+-----+---------+----------+---------+
22 rows in set (0.00 sec)
mysql>
Để xem bộ ký tự riêng lẻ của cơ sở dữ liệu chạy này:
mysql> show create database sample;
+----------+-------------------------------------------------------------------+
| Database | Create Database |
+----------+-------------------------------------------------------------------+
| sample | CREATE DATABASE `sample` /*!40100 DEFAULT CHARACTER SET latin1 */ |
+----------+-------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql>
Đối với các cài đặt, bạn có thể thử điều này:
Thêm các dòng vào my.cnf
[mysqld]
character_set_database=utf8
character_set_server=utf8
sau đó khởi động lại mysql
Tôi đã thảo luận điều này trở lại vào ngày 01 tháng 8 năm 2011: Mã hóa bộ ký tự trong bảng
CAVEAT (Dành cho Máy chủ DB DB trong Windows)
Những lệnh này
ALTER DATABASE dbname CHARACTER SET utf8;
ALTER DATABASE dbname COLLATE 'utf8_general_ci';
không hoạt động trong phiên bản Windows của MySQL vì cách Windows khóa các tệp. Các tập tin cần thiết được gọi db.opt
là nằm trong thư mục con cơ sở dữ liệu trong datadir
.
Bạn có thể phải làm như sau:
- mysqldump cơ sở dữ liệu đó (không có cơ sở dữ liệu tạo thông tin, chỉ tạo bảng và INSERT)
- bỏ cơ sở dữ liệu đó
- tạo cơ sở dữ liệu với bộ ký tự cụ thể và đối chiếu
- tải lại trong bãi chứa vào nó
TIẾNG VIỆT
Bất kể bạn làm gì, vui lòng thực hiện bất kỳ thay đổi nào trên Máy chủ Dev / Staging để xem bạn có đạt được hiệu ứng mong muốn không
CẬP NHẬT 2012-12-05 11:00 EDT
Những câu hỏi của bạn
Tôi có nên thực sự thay đổi nó?
Để đảm bảo việc xử lý dữ liệu đúng cách, bạn có thể muốn đảm bảo rằng bạn có táo. Dữ liệu được chuẩn bị dưới dạng một bộ ký tự và tải nó vào một bảng với cơ sở dữ liệu có thể sắp xếp dữ liệu như thể nó thấy một bộ ký tự khác có thể sẽ không hiển thị dữ liệu với bộ ký tự mysqld nhìn thấy khi được truy xuất và gửi lại cho Kết nối DB. Hãy thử tải cơ sở dữ liệu trên Máy chủ Dev / Staging và thử nghiệm cài đặt bộ ký tự mặc định.
Tại sao một số mặc định sử dụng utf8
nhưng một số sử dụng mặc định latin1
?
Điều này phụ thuộc vào phiên bản HĐH của Binary MySQL. Phiên bản Windows có thể có latin1
trong khi Phiên bản Linux có thể sử dụng utf8
.