KB4055758 – КОРЕКЦИЯ: Несъгласувано поведение за връщане на завършващи празни стойности в края на CHAR и двоични данни в 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 е ВКЛЮЧЕНО, когато се създава колона с знак NULL, то се държи като колона с знак NOT NULL: стойностите се допълват отдясно до размера на колоната. Ако ANSI_PADDING е ИЗКЛ., когато се създава колона с знак NULL, то се държи като колона varchar с ANSI_PADDING зададено ИЗКЛ.: завършващите празни стойности се отрязват.

Решение

Този проблем е решен в следните кумулативни актуализации за SQL Server:

Сборна актуализация 2 за SQL Server 2017

Сборна актуализация 9 за SQL Server 2016

Сборна актуализация 6 за SQL Server 2016 SP1

Сборна актуализация 8 за SQL Server 2014 SP2

Сборна актуализация 7 за SQL Server 2014 SP1

За кумулативните актуализации за SQL Server:

Всяка нова кумулативна актуализация за SQL Server съдържа всички актуални поправки и корекции на защитата, които са били включени в предишната кумулативна актуализация. Прегледайте последните кумулативни актуализации за SQL Server:

Последна сборна актуализация за SQL Server 2017

Последна сборна актуализация за SQL Server 2016

Последна сборна актуализация за SQL Server 2014

Състояние

Microsoft потвърждава, че това е проблем в продуктите на Microsoft, които са изброени в раздела "Важи за"

Справки

Научете повече относно терминологията, която Microsoft използва за описване на актуализациите на софтуера.