KB4055758 . ИСПРАВЛЕНИЕ. Несогласованное поведение при возврате конечных пустых значений в конце данных CHAR и BINARY в SQL Server

Применяется к
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2016 Service Pack 1 SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use) SQL Server 2017 Developer on Windows SQL Server 2017 Enterprise on Windows SQL Server 2017 Enterprise Core on Windows SQL Server 2017 Standard on Windows

Проблема

Предположим, что у вас есть таблица microsoft SQL Server с одним или несколькими индексами. При запросе к таблице SQL Server может выполнять несогласованное заполнение данных для столбцов CHAR и BINARY. Несогласованное поведение при возврате конечных пустых значений в конце столбцов данных CHAR и BINARY зависит от следующих условий:

  • Параметры ANSI_PADDING при создании столбцов в таблице SQL Server.
  • Решение выполнить сканирование таблицы или поиск индекса по столбцам.

Причина

В некоторых сценариях SQL Server может выполнять оптимизацию, которая позволяет обойти множество операций для более быстрой доставки данных. Проблема возникает из-за того, что SQL Server не признает, что оптимизация не может быть применена для приведенного выше сценария.

Дополнительные сведения

Это поведение SQL Server не соответствует поведению, описанное в следующей статье: Использование данных Char и Varchar.

Примечание

Если ANSI_PADDING имеет значение ON при создании столбца char NULL, он ведет себя так же, как столбец char NOT NULL: значения заполняются по правому краю в размере столбца. Если при создании столбца char NULL ANSI_PADDING имеет значение OFF, он ведет себя как столбец varchar с ANSI_PADDING значение OFF: конечные пробелы усекаются.

Решение

Эта проблема устранена в следующих накопительных обновлениях для SQL Server:

Накопительный пакет обновления 2 для SQL Server 2017

Накопительный пакет обновления 9 для SQL Server 2016 г.

Накопительный пакет обновления 6 для SQL Server 2016 с пакетом обновления 1 (SP1)

Накопительный пакет обновления 8 для SQL Server 2014 с пакетом обновления 2 (SP2)

Накопительный пакет обновления 7 для SQL Server 2014 с пакетом обновления 1 (SP1)

Сведения о накопительных обновлениях для SQL Server:

Каждое новое накопительное обновление для SQL Server содержит все исправления и все исправления для системы безопасности, которые были включены в предыдущее накопительное обновление. Ознакомьтесь с последними накопительными обновлениями для SQL Server:

Последнее накопительное обновление для SQL Server 2017 г.

Последнее накопительное обновление для SQL Server 2016 г.

Последнее накопительное обновление для SQL Server 2014 г.

Состояние

Корпорация Майкрософт подтвердила, что это проблема в продуктах Майкрософт, перечисленных в разделе "Применимо к"

Ссылки

Узнайте о терминологии, используемой корпорацией Майкрософт для описания обновлений программного обеспечения.