2013-07-26 19 views
8

Tôi đã viết một truy vấnTại sao Máy chủ SQL bỏ qua không gian trống ở cuối tự động?

SELECT * FROM Users WHERE UserName = 'admin ' 

do nhập nhầm. Nhưng tôi thấy rằng kết quả giống như

SELECT * FROM Users WHERE UserName = 'admin' 

Dường như không gian trống ở cuối sẽ bị máy chủ SQL bỏ qua tự động.

Ai đó có thể cho tôi biết lý do không?

FYI, cột UserName thuộc loại nvarchar(MAX).

Trả lời

15

Máy chủ SQL tuân thủ tiêu chuẩn ANSI/ISO để so sánh chuỗi.

Bài viết How SQL Server Compares Strings with Trailing Spaces giải thích chi tiết điều này.

Máy chủ SQL tuân theo đặc tả ANSI/ISO SQL-92 ... về cách so sánh các chuỗi có dấu cách. Tiêu chuẩn ANSI yêu cầu đệm cho các chuỗi ký tự được sử dụng để so sánh sao cho độ dài của chúng phù hợp với trước khi so sánh chúng. Phần đệm trực tiếp ảnh hưởng đến ngữ nghĩa của các thuộc tính mệnh đề WHERE và HAVING và các chuỗi so sánh Transact-SQL khác . Ví dụ, Transact-SQL xem xét các chuỗi 'abc' và 'abc' tương đương với hầu hết các phép so sánh.

Ngoài ra, như đã giải thích trong bài viết, nếu bạn so sánh với LIKE bạn làm không có được hành vi này.

3

Nếu bạn đang cố gắng như

SELECT * 
FROM Users 
WHERE UserName = 'admin ' 

khoảng trống này sẽ được bỏ qua SQL Server. Nhưng nếu bạn cố gắng như thế này

SELECT * 
FROM Users 
WHERE UserName Like 'admin ' 

Nó cũng xem xét không gian trống.

DECLARE @Person1 varchar(50)='admin' 
SELECT 1 WHERE @Person1 = 'admin ' 
SELECT 1 WHERE @Person1 like 'admin ' 

Kết quả của tập truy vấn trên là

enter image description here