Chuyển đổi bộ ký tự được thực hiện ẩn hoàn toàn ở cấp kết nối cơ sở dữ liệu. Bạn có thể buộc chuyển đổi tự động tắt trong chuỗi kết nối ODBC hoặc ADODB với tham số "Tự động dịch = Sai". Điều này KHÔNG được khuyến khích. Xem: https://msdn.microsoft.com/en-us/library/ms130822.aspx
Đã xảy ra sự không tương thích với mã hóa trong SQL Server 2005 khi trang mã cơ sở dữ liệu và khách hàng không khớp. https://support.microsoft.com/kb/KbView/904803
Bảng điều khiển quản lý SQL 2008 trở lên là ứng dụng UNICODE. Tất cả các giá trị được nhập hoặc yêu cầu được hiểu như vậy ở cấp ứng dụng. Cuộc hội thoại đến và từ cột collation được thực hiện hoàn toàn. Bạn có thể xác minh điều này với:
SELECT CAST(N'±' as varbinary(10)) AS Result
này sẽ trở lại 0xB100
đó là ký tự Unicode U + 00B1 (như đã nhập trong cửa sổ Management Console). Bạn không thể tắt "Tự động dịch" cho Management Studio.
Nếu bạn chỉ định một đối chiếu khác nhau trong lựa chọn, cuối cùng bạn sẽ kết thúc trong một chuyển đổi kép (có thể mất dữ liệu) miễn là "Tự động dịch" vẫn hoạt động. Ký tự ban đầu đầu tiên được chuyển đổi thành collation mới trong quá trình chọn, lần lượt được "Tự động dịch" sang mã "ứng dụng" thích hợp. Đó là lý do tại sao các thử nghiệm COLLATION khác nhau của bạn vẫn hiển thị tất cả cùng một kết quả.
Bạn có thể xác minh rằng quy định cụ thể đối chiếu KHÔNG có ảnh hưởng trong các lựa chọn, nếu bạn đúc kết quả như VARBINARY
thay vì VARCHAR
nên việc chuyển đổi SQL Server không mất hiệu lực của khách hàng trước khi nó được trình bày:
SELECT cast(columnName COLLATE SQL_Latin1_General_CP850_BIN2 as varbinary(10)) from tableName
SELECT cast(columnName COLLATE SQL_Latin1_General_CP1_CI_AS as varbinary(10)) from tableName
Điều này sẽ giúp bạn có được 0xF1
hoặc 0xB1
tương ứng nếu columnName
chứa chỉ là nhân vật '±'
bạn vẫn có thể nhận được kết quả chính xác và chưa một ký tự sai, nếu font bạn đang sử dụng không cung cấp pr hoạt động glyph.
Vui lòng kiểm tra đại diện nội bộ thực tế của nhân vật của bạn bằng cách đúc các truy vấn để VARBINARY
trên một mẫu thích hợp và xác minh xem mã này thực sự tương ứng với collation cơ sở dữ liệu định nghĩa SQL_Latin1_General_CP850_BIN2
SELECT CAST(columnName as varbinary(10)) from tableName
Sự khác biệt về đối chiếu ứng dụng và cơ sở dữ liệu tăng gấp đôi collation có thể đi không được chú ý miễn là chuyển đổi luôn được thực hiện theo cùng một cách trong và ngoài. Rắc rối xuất hiện ngay sau khi bạn thêm một khách hàng với một đối chiếu khác nhau. Sau đó, bạn có thể thấy rằng chuyển đổi nội bộ không thể khớp chính xác với các ký tự.
Tất cả những gì đã nói, bạn nên nhớ rằng Management Studio thường không phải là tham chiếu cuối cùng khi diễn giải tập hợp kết quả. Ngay cả khi nó có vẻ vô nghĩa trong MS, nó vẫn có thể là đầu ra chính xác. Câu hỏi đặt ra là liệu các hồ sơ có hiển thị chính xác trong các ứng dụng của bạn hay không.
Chào mừng bạn đến StackOverflow: nếu bạn gửi mẫu mã, XML hoặc dữ liệu, ** xin vui lòng ** làm nổi bật những dòng trong trình soạn thảo văn bản và bấm vào nút "mẫu mã" ('{}') trên thanh công cụ trình soạn thảo để định dạng và cú pháp độc đáo làm nổi bật nó! –