Почему я не могу поместить ограничение на nvarchar (макс.)?

Спецификация XHTML 1 говорит:

РЎ.3. Минимизация элемента и Пустое Содержание Элемента

Приведенный пустой пример элемента, модель содержания которого не EMPTY (например, пустой заголовок или абзац) не используют минимизированную форму (например, использование

и не

).

XHTML DTD определяет элементы сценария как:



42
задан Eric 26 July 2009 в 14:24
поделиться

3 ответа

nvarchar (max) действительно отличается от типа данных nvarchar (integer-length) . Его характеристики больше похожи на устаревший тип данных text .

Если значение nvarchar (max) становится слишком большим, например text , оно будет сохранено вне строки (строка ограничена максимумом 8000 байтов. ), а указатель на него хранится в самой строке. Невозможно эффективно проиндексировать такое большое поле, а тот факт, что данные могут храниться где-то еще, еще больше усложняет поиск и сканирование индекса.
Ограничение уникальности требует принудительного применения индекса, и в результате разработчики SQL Server решили запретить создание для него уникального ограничения.

78
ответ дан 26 November 2019 в 23:29
поделиться

Уникальное ограничение на самом деле является индексом, и nvarchar (max) не может использоваться в качестве ключа в индексе.

4
ответ дан 26 November 2019 в 23:29
поделиться

Потому что MAX действительно большой (2 31 -1 байт) и может привести к сбою сервера, если ему придется проверять уникальность записей размером в несколько мегабайт. .

Из документации по Create Index , я предполагаю, что это верно и для уникальных ограничений.

Максимально допустимый размер объединенные значения индекса составляют 900 байт.

РЕДАКТИРОВАТЬ : Если вам действительно нужна уникальность, вы можете потенциально приблизить ее, вычислив хэш данных и сохранив его в уникальном индексе. Даже большой хэш будет достаточно маленьким, чтобы поместиться в индексируемый столбец. Вам нужно будет выяснить, как обрабатывать коллизии - возможно, вручную проверить коллизии и дополнить данные (изменяя хэш), если обнаружена ошибочная коллизия.

24
ответ дан 26 November 2019 в 23:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: