Bắt đầu trong SQL Server 2019 (hiện đang ở phiên bản beta / "Bản xem trước công nghệ cộng đồng"), có hỗ trợ riêng cho UTF-8 thông qua một loạt các đối chiếu UTF-8 mới. TUY NHIÊN, có khả năng sử dụng UTF-8 không có nghĩa là bạn nên làm vậy. Có những hạn chế nhất định khi sử dụng UTF-8, chẳng hạn như:
- Chỉ 128 điểm mã đầu tiên là 1 byte (tức là bộ ASCII 7 bit tiêu chuẩn)
- Gần 2000 điểm mã tiếp theo là 2 byte, do đó không tiết kiệm dung lượng so với UTF-16 /
NVARCHAR
- Các điểm mã 63k còn lại trong BMP (tức là phạm vi U + 0800 - U + FFFF) đều có 3 byte, do đó lớn hơn 1 byte so với cùng một ký tự trong UTF-16 /
NVARCHAR
.
- Chỉ cần nói rằng: Ký tự bổ sung có 4 byte trong cả hai bảng mã, vì vậy không có sự khác biệt về không gian ở đó
- Mặc dù bạn có thể tiết kiệm không gian bằng UTF-8, nhưng rất có khả năng bạn sẽ đánh mạnh vào hiệu suất để làm việc đó.
Điều thực sự xuất hiện là đây: UTF-8 là một thiết kế định dạng lưu trữ để cho phép các hệ thống 8 bit (thường được thiết kế xung quanh ASCII và ASCII Extended - Trang mã) để sử dụng Unicode mà không phá vỡ bất kỳ điều gì hoặc yêu cầu bất kỳ sửa đổi nào hiện có các tập tin để giữ cho mọi thứ chạy. UTF-8 là tuyệt vời cho các hệ thống tệp và mạng, nhưng dữ liệu được lưu trữ trong SQL Server thì không. Thực tế là dữ liệu chỉ xảy ra hầu hết (hoặc hoàn toàn) trong phạm vi ASCII tiêu chuẩn yêu cầu ít không gian hơn so với dữ liệu tương tự khi được lưu trữ dưới dạng UTF-16 / NVARCHAR
là một tác dụng phụ. Chắc chắn, đó là một tác dụng phụ có thể chứng minh hữu ích, nhưng quyết định đó cần được đưa ra bởi một người hiểu cả dữ liệu và hậu quả / nhược điểm của quyết định này. Đây làkhông phải là một tính năng cho sử dụng chung.
Ngoài ra, trường hợp sử dụng chính cho UTF-8 (trong SQL Server) là dành cho mã ứng dụng đã sử dụng UTF-8, có thể đã có một RDBMS khác hỗ trợ nó và không có mong muốn hoặc khả năng cập nhật lược đồ mã / DB ứng dụng để sử dụng NVARCHAR
kiểu dữ liệu (cho bảng, biến, tham số, v.v.) hoặc để tiền tố chuỗi ký tự có chữ hoa "N". Mục tiêu giống như lý do UTF-8 hiện có: cho phép mã ứng dụng sử dụng Unicode mà không thay đổi cấu trúc tổng thể hoặc hiển thị dữ liệu tồn tại không hợp lệ. Nếu điều này mô tả tình huống của bạn, thì hãy sử dụng UTF-8, nhưng lưu ý rằng vẫn còn một vài lỗi / vấn đề với nó.
Nếu bạn không có một nhu cầu rõ ràng cho Unicode làm việc mà không sử dụng NVARCHAR
hoặc chữ hoa "N" xâu tiền tố, sau đó kịch bản chỉ khác nơi UTF-8 là một lợi ích là nếu bạn có rất nhiều chủ yếu là dữ liệu ASCII chuẩn mà nhu cầu để cho phép Các ký tự Unicode và bạn đang sử dụng NVARCHAR(MAX)
(điều đó có nghĩa là nén dữ liệu sẽ không hoạt động) và bảng được cập nhật thường xuyên (vì vậy, Indexed Clusterstore Index có thể sẽ không thực sự giúp ích).
Để biết chi tiết đầy đủ, xin vui lòng xem bài viết của tôi:
Hỗ trợ UTF-8 bản địa trong SQL Server 2019: Tiên tri cứu rỗi hay sai?