2014-09-17 14 views

Trả lời

15

Trước hết tôi phải nói rằng tôi không sử dụng MySQL nhưng tôi biết về ODBC Drivers. Trong ODBC có các API khác nhau cho unicode và ansi. API ansi kết thúc bằng A và API unicode kết thúc bằng W (ví dụ: SQLPrepareA và SQLPrepareW). API ansi chấp nhận byte/octet cho chuỗi ký tự và do đó chỉ có thể xử lý chrs 0-255. API unicode chấp nhận SQLWCHARs là mã nhị phân unicode mã hóa UCS-2 2 byte (phiên bản MS SQL Server mới hơn có thể xử lý chuỗi được mã hóa UTF16) và có thể xử lý xấp xỉ 65.000 điểm mã đầu tiên trong unicode.

Vì vậy, nếu bạn cần lưu trữ dữ liệu unicode, bạn không có lựa chọn trình điều khiển để sử dụng.

Tôi sẽ không để ý kiến ​​về tốc độ từ Carnangel khiến bạn sử dụng trình điều khiển unicode và trong mọi trường hợp, các bình luận của anh ấy không bao gồm bất kỳ sự kiện nào. Ông có thể đề cập đến:

Nếu bạn lưu trữ dữ liệu unicode trong MySQL, UTF-8 sẽ được mã hóa và chuyển qua mạng của bạn dưới dạng UTF-8. Ở cuối trình khách, trình điều khiển ODBC sẽ phải chuyển đổi dữ liệu được mã hóa UTF-8 thành UCS-2 vì đây là những gì ODBC cần. Rõ ràng là ngược lại áp dụng.

Nếu bạn viết một ứng dụng ANSI ODBC (là một trong đó sử dụng apsi ansi ODBC) với một trình điều khiển ODBC unicode thì trình quản lý trình điều khiển ODBC sẽ phải chuyển đổi UCS-2 trình điều khiển trở về 8 bit (lossy) và chuyển đổi dữ liệu 8 bit mà bạn chuyển sang trình điều khiển sang UCS-2. Vậy đừng làm thế.

Những ngày này tôi sẽ ngạc nhiên nếu có ai vẫn đang sử dụng trình điều khiển ANSI ODBC.

3

Như bạn có thể biết Ansi và unicode được áp dụng cho loại ký tự dữ liệu. Bạn có thể chọn một hoặc khác, nó không phải là một câu hỏi của bộ xử lý Đây là sự khác biệt giữa chúng: - Unicode cho phép bạn có tất cả các thuộc tính ký tự được kích hoạt nhưng giảm điều trị tốc độ thô - Ansi, đối diện, ít ký tự nhập nhưng điều chỉnh tốc độ thô sẽ tăng tốc

Nếu bạn là người dùng mới sử dụng Unicode, nếu không bạn có thể chọn tùy chọn Ansi.

Tôi hy vọng bạn đã có những điểm;)

+0

điều trị tốc độ thô là gì? –

+0

Về cơ bản đó là thời gian đọc dữ liệu, và do đó thời gian xuất hiện của dữ liệu. Giả sử bạn có 2 dự án: Một trong đó bạn có hai bảng với số lượng tương đối ít Cách khác trong đó có 50 bảng và nhiều dữ liệu Nếu trong cả hai trường hợp bạn chọn "Chọn * từ 'table' " - người đầu tiên sẽ đọc dữ liệu thật nhanh (tốc độ thô cao) - Thứ hai sẽ mất nhiều thời gian hơn để đọc dữ liệu của bảng (tốc độ ít nguyên) – Carnangel

Các vấn đề liên quan