2012-04-05 46 views
243

Tôi đã thấy tiền tố N trong một số truy vấn T-SQL chèn. Nhiều người đã sử dụng N trước khi chèn giá trị vào bảng.Ý nghĩa của tiền tố N trong các câu lệnh T-SQL là gì?

Tôi đã tìm kiếm, nhưng tôi không thể hiểu được mục đích của việc bao gồm N trước khi chèn bất kỳ chuỗi nào vào bảng.

INSERT INTO Personnel.Employees 
VALUES(N'29730', N'Philippe', N'Horsford', 20.05, 1), 

Trả lời

300

Nó tuyên bố chuỗi as type nvarchar dữ liệu, chứ không phải là varchar

Bạn có thể đã nhìn thấy mã Transact-SQL mà đi dây xung quanh sử dụng một tiền tố N. Điều này biểu thị rằng chuỗi tiếp theo là trong Unicode (chữ N thực sự là viết tắt của bộ ký tự ngôn ngữ quốc gia). Trong đó có nghĩa là bạn đang chuyển một giá trị NCHAR, NVARCHAR hoặc NTEXT, như trái ngược với CHAR, VARCHAR hoặc TEXT.

Để báo from Microsoft:

Prefix Unicode chuỗi ký tự hằng với N. thư Without tiền tố N, chuỗi được chuyển thành trang mã mặc định của cơ sở dữ liệu . Trang mã mặc định này có thể không nhận ra các ký tự nhất định.


Nếu bạn muốn biết sự khác biệt giữa hai loại dữ liệu, thấy điều này SO bài:

What is the difference between varchar and nvarchar?

+1

@Curt có nghĩa là tôi sử dụng 'N' chỉ khi tôi đang sử dụng các kiểu dữ liệu sau' CHAR, VARCHAR hoặc TEXT' ?? bởi vì 'NCHAR, NVARCHAR hoặc NTEXT' vốn đã lưu trữ UNICODE tôi không yêu cầu thêm nó seperatly .... nó có đúng không? – Pritesh

+0

@Pritesh - Chỉ khi bạn đang sử dụng trang mã mặc định có thể không nhận ra các ký tự unicode đó dưới dạng văn bản in đậm ở trên. – Todd

+4

@Curt Liên kết đến 'cơ sở dữ liệu aspfaq com' chuyển hướng đến các trang web vô cùng đáng ngờ (' fkref com', 'za1 zeroredirect1 com',' i0z13 trackvoluum com'), đã được tường lửa của chúng tôi đánh dấu là khiêu dâm, trang web độc hại và spam URL. Tôi đã liên lạc với chủ sở hữu aspfaq.com và chỉnh sửa câu trả lời để xóa liên kết. – jaume

4

Giả sử giá trị là kiểu nvarchar cho rằng chỉ có chúng ta đang sử dụng N' '

4

hãy để tôi cho bạn biết điều gì gây phiền nhiễu đã xảy ra với tiền tố N' '. và tôi không thể sửa chữa 2 ngày.

collation db của tôi là SQL_Latin1_General_CP1_CI_AS.

có một bảng. cột MyCol1nvarchar

nhưng truy vấn này không phù hợp chính xác Giá trị tồn tại.

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = 'ESKİ' 

// 0 result 

sử dụng tiền tố N '' sửa chữa nó

SELECT TOP 1 * FROM myTable1 WHERE MyCol1 = N'ESKİ' 

// 1 result - found!!!! 

tại sao? vì latin1_general không có chấm lớn İ đó là lý do tại sao nó không thành công.

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