sự khác biệt giữa utf8 và latin1 là gì?
sự khác biệt giữa utf8 và latin1 là gì?
Câu trả lời:
UTF-8 được chuẩn bị cho sự thống trị thế giới, Latin1 thì không.
Nếu bạn đang cố lưu trữ các ký tự không phải là tiếng Latinh như tiếng Trung, tiếng Nhật, tiếng Do Thái, tiếng Nga, v.v ... bằng cách sử dụng mã hóa Latin1, thì chúng sẽ kết thúc dưới dạng mojibake . Bạn có thể thấy văn bản giới thiệu của bài viết này hữu ích (và thậm chí nhiều hơn nếu bạn biết một chút Java).
Lưu ý rằng hỗ trợ UTF-8 đầy đủ 4 byte chỉ được giới thiệu trong MySQL 5.5. Trước phiên bản đó, nó chỉ đi tối đa 3 byte cho mỗi ký tự, không phải 4 byte cho mỗi ký tự. Vì vậy, nó chỉ hỗ trợ mặt phẳng BMP chứ không hỗ trợ mặt phẳng Emoji. Nếu bạn muốn hỗ trợ UTF-8 đầy đủ 4 byte, hãy nâng cấp MySQL lên ít nhất 5,5 hoặc tìm RDBMS khác như PostgreQuery. Trong MySQL 5.5+, nó được gọi là utf8mb4
.
VARBINARY
thay vì VARCHAR
và giải mã / mã hóa trong tầng doanh nghiệp, nhưng đây là hacky. Cân nhắc hỏi một câu hỏi mới, có thể có những cách tốt hơn.
Trong latin1 mỗi ký tự dài chính xác một byte. Trong utf8, một ký tự có thể bao gồm nhiều hơn một byte. Do đó, utf8 có nhiều ký tự hơn latin1 (và các ký tự mà chúng có chung không nhất thiết phải được biểu thị bằng cùng một byte / bykishquence).
binary
đối chiếu ...? và cái nào tốt hơn cho các trường tiếng Anh / số: ascii_general_ci
hay ascii_bin
?