sự khác nhau giữa utf8 và latin1 là gì?Sự khác biệt giữa utf8 và latin1
Trả lời
Trong latin1, mỗi ký tự chính xác là một byte. Trong utf8, một ký tự có thể chứa nhiều hơn một byte. Do đó, utf8 có nhiều ký tự hơn latin1 (và các ký tự chúng có điểm chung không nhất thiết phải được đại diện bởi cùng một byte/by suchquence).
Còn ascii và bin thì sao? –
@YoushaAleayoub ASCII là mã hóa một byte sử dụng các ký tự từ 0 đến 127, do đó, nó có thể mã hóa một nửa số ký tự là latin1. Đó là một tập hợp con nghiêm ngặt của cả latin1 và utf8, có nghĩa là các byte từ 0 đến 127 trong cả latin1 và utf8 mã hóa những thứ tương tự như chúng thực hiện trong ASCII. Bin không phải là mã hóa. Nó thường là một tùy chọn mà bạn có thể đưa ra khi đọc một tập tin, nói cho các hàm IO không áp dụng bất kỳ mã hóa nào, mà thay vào đó chỉ đọc byte tệp theo byte. – sepp2k
cảm ơn, tôi có nghĩa là 'nhị phân' đối chiếu ...? và cái nào tốt hơn cho các trường tiếng anh/số: 'ascii_general_ci' hoặc' ascii_bin'? –
UTF-8 được chuẩn bị để thống trị thế giới, Latin1 thì không.
Nếu bạn đang cố gắng lưu trữ các ký tự không phải Latinh như tiếng Trung, tiếng Nhật, tiếng Do Thái, chữ Kirin, vv bằng cách sử dụng mã hóa Latin1, thì chúng sẽ kết thúc là mojibake. Bạn có thể tìm thấy văn bản giới thiệu của this article 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 toàn bộ hỗ trợ UTF-8 chỉ được giới thiệu trong MySQL 5.5. Trước phiên bản đó, nó chỉ lên tới 3 byte, không phải 4 byte cho mỗi ký tự. Nếu bạn muốn hỗ trợ đầy đủ UTF-8, hãy nâng cấp MySQL lên ít nhất 5.5 hoặc đi cho một RDBMS khác như PostgreSQL.
là 4 byte cho mỗi điểm mã, không phải ký tự. –
Mysql 5.1 hỗ trợ 3 byte UTF-8, tuy nhiên Mysql 5.5 [không hỗ trợ] (http://dev.mysql.com/doc/refman/5.5/en/charset-unicode.html) 4 byte UTF-8 là utf8mb4. – velcrow
Đúng vậy, nhưng MySQL 5.5 không phải là GA vào lúc này câu trả lời này đã được đăng. Nó được phát hành tháng 12 năm 2010. – BalusC
Chúng là các bảng mã khác nhau (với * một số * ký tự ánh xạ tới các chuỗi byte phổ biến, ví dụ: các ký tự ASCII và nhiều chữ cái có dấu). UTF-8 là một mã hóa Unicode với tất cả các điểm mã của nó; Latin1 mã hóa ít hơn 256 ký tự. – ShreevatsaR