Để làm lại câu trả lời của tôi, LEN () không an toàn để kiểm tra ANSI_PADDING vì nó được xác định để trả về độ dài không bao gồm dấu cách ở cuối và DATALENGTH () thích hợp hơn như AdaTheDev nói.
Điều thú vị là ANSI_PADDING là cài đặt thời gian chèn và nó được tôn trọng cho VARCHAR nhưng không dành cho NVARCHAR.
Thứ hai, nếu trả về một cột có dấu cách ở cuối hoặc sử dụng '=' cho bằng nhau, thì dường như có một sự cắt ngắn ngầm của dấu cách ở cuối.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING OFF
GO
CREATE TABLE [dbo].[TestFeature1](
[Id] [varchar](50) NOT NULL,
[Leng] [decimal](18, 0) NOT NULL
) ON [PRIMARY]
GO
insert into TestFeature1 (id,leng) values ('1',100); insert into TestFeature1 (id,leng) values ('1 ',1000);
-- verify no spaces inserted at end
select '['+id+']', * from TestFeature1
select datalength(id), * from TestFeature1
go
DROP TABLE [dbo].[TestFeature1]
go
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING OFF
GO
CREATE TABLE [dbo].[TestFeature1](
[Id] [nvarchar](50) NOT NULL,
[Leng] [decimal](18, 0) NOT NULL
) ON [PRIMARY]
GO
insert into TestFeature1 (id,leng) values ('1',100); insert into TestFeature1 (id,leng) values ('1 ',1000);
-- verify spaces inserted at end, and ANSI_PADDING OFF was not honoured by NVARCHAR
select '['+id+']', * from TestFeature1
select datalength(id), * from TestFeature1
go