Theo this, SQL Server 2K5 sử dụng UCS-2 nội bộ. Nó có thể lưu trữ dữ liệu UTF-16 trong UCS-2 (với các kiểu dữ liệu thích hợp, nchar, vv), tuy nhiên nếu có một ký tự bổ sung thì nó được lưu trữ dưới dạng 2 ký tự UCS-2.Lưu trữ dữ liệu UTF-16/Unicode trong SQL Server
Điều này mang lại các vấn đề rõ ràng với các hàm chuỗi, cụ thể là một ký tự được xử lý là 2 bởi SQL Server.
Tôi hơi ngạc nhiên khi SQL Server về cơ bản chỉ có thể xử lý UCS-2 và thậm chí nhiều hơn để điều này không được sửa trong SQL 2K8. Tôi đánh giá cao rằng một số trong những nhân vật này có thể không phải là tất cả những gì phổ biến.
Ngoài các chức năng được đề xuất trong bài viết, mọi đề xuất về cách tiếp cận tốt nhất để xử lý các hàm chuỗi (bị hỏng) và dữ liệu UTF-16 trong SQL Server 2K5.
Chức năng chuỗi nào bị hỏng? – gbn
LEN sẽ trả về số ký tự UCS-2 trong chuỗi, không phải số ký tự UTF-16. SUBSTRING sẽ phân tách các ký tự UTF-16 làm đôi. Tương tự cho LEFT và RIGHT. UPPER và LOWER cũng có thể sẽ phá vỡ. REVERSE chắc chắn sẽ phá vỡ. CHARINDEX và PATINDEX cũng có. Không chắc về DIFFERENCE và STUFF. Vì vậy, rất nhiều người trong số họ .... –
Cảm ơn bạn đã chỉ ra điều này. Thực tế là nó không hỗ trợ TẤT CẢ các ký tự Unicode có nghĩa là một số giá trị chuỗi UTF-16 (ví dụ: từ Windows hoặc .NET) không hợp lệ để kết xuất vào SQL Server mà không cần xác minh. Để bất kỳ ứng dụng nào không có lỗi và kỹ thuật chính xác (cách các ký tự gây lỗi RARE không tạo ra chút khác biệt về độ chính xác), TẤT CẢ các chuỗi phải được xác thực để chứa các ký tự tương thích UCS-2 trước được lưu trữ trong SQL Server. Tuyệt vời! Cách làm cho công việc của tôi khó khăn hơn nhiều. – Triynko