KB4055758 - CORRECTIF : comportement incohérent pour retourner des espaces de fin à la fin des données CHAR et BINARY dans SQL Server

S’applique à
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

Symptômes

Supposons que vous disposez d’une table Microsoft SQL Server qui a un ou plusieurs index créés dessus. Lorsque vous interrogez la table, SQL Server peut effectuer un remplissage de données incohérent pour les colonnes CHAR et BINARY. Le comportement incohérent pour retourner des espaces de fin à la fin des colonnes de données CHAR et BINARY dépend des conditions suivantes :

  • Les paramètres du ANSI_PADDING lorsque des colonnes sont créées dans la table SQL Server.
  • Décision d’effectuer une analyse de table ou une recherche d’index sur les colonnes.

Cause

Dans certains scénarios, SQL Server peut effectuer une optimisation qui lui permet de contourner de nombreuses opérations pour accélérer la remise des données. Le problème se produit car SQL Server ne reconnaît pas que l’optimisation ne peut pas être appliquée pour le scénario ci-dessus.

Informations supplémentaires

Ce comportement de SQL Server n’est pas conforme au comportement décrit dans l’article suivant : Utilisation des données Char et Varchar.

Remarque

Si ANSI_PADDING a la valeur ON lors de la création d’une colonne char NULL, elle se comporte de la même façon qu’une colonne char NOT NULL : les valeurs sont complétées à la taille de la colonne. Si ANSI_PADDING a la valeur OFF lors de la création d’une colonne char NULL, elle se comporte comme une colonne varchar avec ANSI_PADDING défini sur OFF : les espaces de fin sont tronqués.

Résolution

Ce problème est résolu dans les mises à jour cumulatives suivantes pour SQL Server :

Mise à jour cumulative 2 pour SQL Server 2017

Mise à jour cumulative 9 pour SQL Server 2016

Mise à jour cumulative 6 pour SQL Server 2016 SP1

Mise à jour cumulative 8 pour SQL Server 2014 SP2

Mise à jour cumulative 7 pour SQL Server 2014 SP1

À propos des mises à jour cumulatives pour SQL Server :

Chaque nouvelle mise à jour cumulative pour SQL Server contient tous les correctifs logiciels et tous les correctifs de sécurité inclus dans la mise à jour cumulative précédente. Consultez les dernières mises à jour cumulatives pour SQL Server :

Dernière mise à jour cumulative pour SQL Server 2017

Dernière mise à jour cumulative pour SQL Server 2016

Dernière mise à jour cumulative pour SQL Server 2014

État

Microsoft a confirmé qu’il s’agit d’un problème dans les produits Microsoft répertoriés dans la section « S’applique à »

Références

En savoir plus à propos de la terminologie utilisée par Microsoft pour décrire les mises à jour logicielles.