Tiền tố N trước chuỗi trong truy vấn Transact-SQL


41

Bạn có thể cho tôi biết, khi nào tôi nên sử dụng tiền tố N trước chuỗi trong truy vấn Transact-SQL? Tôi đã bắt đầu làm việc với một cơ sở dữ liệu nơi tôi không nhận được bất kỳ kết quả nào bằng cách sử dụng truy vấn như thế này

SELECT * FROM a_table WHERE a_field LIKE '%а_pattern%'

cho đến khi tôi thay đổi mô hình thành N'%а_pattern%'. Tôi chưa bao giờ phải thêm tiền tố này trong quá khứ, vì vậy tôi tò mò. a_fieldđược định nghĩa là nvarchar(255), nhưng tôi nghĩ lý do là một cái gì đó khác.

Câu trả lời:


31

Các bài viết sau đây có một số thông tin tốt về câu hỏi. Câu trả lời ngắn gọn là chỉ có một kiểu không khớp giữa cột unicode và chuỗi không unicode mà bạn đang sử dụng. Từ bài viết KB, có vẻ như bỏ qua tiền tố N vẫn có thể hoạt động trong một số trường hợp, nhưng nó sẽ phụ thuộc vào trang mã và cài đặt đối chiếu của cơ sở dữ liệu. Điều đó có thể giải thích sự thay đổi trong hành vi, nếu trước đây bạn đã thành công với phương pháp không có tiền tố.

https://support.microsoft.com/en-us/kb/239530


6

Điều này biểu thị rằng chuỗi tiếp theo là bằng Unicode (N thực sự là viết tắt của bộ ký tự ngôn ngữ quốc gia). Điều đó có nghĩa là bạn đang chuyển một giá trị NCHAR, NVARCHAR hoặc NTEXT, trái ngược với CHAR, VARCHAR hoặc TEXT. Xem Điều # 2354 để so sánh các loại dữ liệu này.

Unicode thường được sử dụng trong các ứng dụng cơ sở dữ liệu được thiết kế để tạo điều kiện cho các trang mã mở rộng ra ngoài các trang mã tiếng Anh và Tây Âu, ví dụ như tiếng Trung Quốc. Unicode được thiết kế sao cho các bộ ký tự mở rộng vẫn có thể "khớp" vào các cột cơ sở dữ liệu.


3

Tôi nghĩ tiền tố N nói với máy chủ sql coi chuỗi là giá trị unicode. các cột nvarchar là unicode, vì vậy bạn nên sử dụng cú pháp này khi truy cập các cột này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.