Поведение уникального индекса, столбца varchar и (пустых) пробелов

Я использую Microsoft SQL Server 2008 R2 (с последним пакетом обновления / исправлениями), а сортировка базы данных - SQL_Latin1_General_CP1_CI_AS.

Следующий код:

SET ANSI_PADDING ON;
GO

CREATE TABLE Test (
   Code VARCHAR(16) NULL
);
CREATE UNIQUE INDEX UniqueIndex
    ON Test(Code);

INSERT INTO Test VALUES ('sample');
INSERT INTO Test VALUES ('sample ');

SELECT '>' + Code + '<' FROM Test WHERE Code = 'sample        ';
GO

дает следующие результаты:

(затронута 1 строка (строки))

Сообщение 2601, уровень 14, состояние 1, строка 8

Невозможно вставить повторяющуюся ключевую строку в объект 'dbo.Test' с уникальным индексом 'UniqueIndex'. Повторяющееся значение ключа - (образец).

Заявление было прекращено.

‐‐‐‐‐‐‐‐‐‐‐

> образец <

(затронута 1 строка (строки))

Мои вопросы:

  1. Я предполагаю, что индекс не может хранить конечные пробелы .Может ли кто-нибудь указать мне на официальную документацию, которая определяет / определяет это поведение?
  2. Есть ли параметр, позволяющий изменить это поведение, то есть заставить его распознавать «образец» и «образец» как два разных значения (которыми они и являются, по way), так что оба могут быть в index.
  3. Почему на Земле SELECT возвращает строку? SQL Server должен делать что-то действительно забавное / умное с пробелами в предложении WHERE, потому что, если я удалю уникальность в индексе, оба INSERT будут работать нормально, а SELECT вернет две строки!

Любая помощь / указатель в правильном направлении приветствуются. Спасибо.

11
задан Eric 27 February 2012 в 06:01
поделиться