a) Именно так определяется LEN
для работы, используйте DATALENGTH
, чтобы получить длину, включая конечные пробелы (но разделите на 2, чтобы получить длину в символах для типов данных Unicode).
Конечный пробел также игнорируется в SQL Server для сравнения на равенство.то есть SELECT *
FROM MyTable WHERE C1 = ' ABC'
вернет результаты.
b) В SSMS не очень очевидно, что конечные пробелы фактически возвращаются, в результатах в режиме сетки ширина столбца не указывает на это, но если вы копируете и вставляетеC1
в других местах вы увидите, что конечные пробелы фактически сохраняются.
Один из способов увидеть это - использовать DBCC OUTPUTBUFFER
CREATE TABLE MyTable
(
C1 char(80)
);
INSERT INTO MyTable (C1)
VALUES (' ABC');
SELECT C1
FROM MyTable
DBCC OUTPUTBUFFER (@@SPID)
Извлечение для меня результатовниже
00000020 00 20 20 20 41 42 43 20 20 20 20 20 20 20 20 20 . ABC
00000030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00000040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00000050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
00000060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
Все пробелы можно увидеть по ABC
c) Да.Смотри (б)