KB4055758 - CORREZIONE: comportamento incoerente per restituire spazi vuoti finali alla fine dei dati CHAR e BINARY in SQL Server

Si applica a
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

Sintomi

Si supponga di avere una tabella di Microsoft SQL Server che contiene uno o più indici predefiniti. Quando si esegue una query sulla tabella, SQL Server può eseguire una spaziatura interna dei dati non coerente per le colonne CHAR e BINARY. Il comportamento incoerente per restituire gli spazi vuoti finali alla fine delle colonne di dati CHAR e BINARY dipende dalle condizioni seguenti:

  • Le impostazioni del ANSI_PADDING quando vengono create colonne nella tabella SQL Server.
  • Decisione di eseguire l'analisi della tabella o la ricerca indice sulle colonne.

Causa

In alcuni scenari, SQL Server può eseguire un'ottimizzazione che consente di ignorare molte operazioni per un recapito più rapido dei dati. Il problema si verifica perché SQL Server non riconosce che l'ottimizzazione non può essere applicata per lo scenario precedente.

Altre informazioni

Questo comportamento di SQL Server non è conforme al comportamento descritto nell'articolo seguente: Uso dei dati Char e Varchar.

Nota

Se ANSI_PADDING è attivata quando viene creata una colonna char NULL, si comporta come una colonna char NOT NULL: i valori sono posizionati con il tasto destro del mouse alle dimensioni della colonna. Se ANSI_PADDING è DISATTIVATO quando viene creata una colonna char NULL, si comporta come una colonna varchar con ANSI_PADDING disattivato: gli spazi vuoti finali vengono troncati.

Risoluzione

Questo problema è stato risolto negli aggiornamenti cumulativi seguenti per SQL Server:

Aggiornamento cumulativo 2 per SQL Server 2017

Aggiornamento cumulativo 9 per SQL Server 2016

Aggiornamento cumulativo 6 per SQL Server 2016 SP1

Aggiornamento cumulativo 8 per SQL Server 2014 SP2

Aggiornamento cumulativo 7 per SQL Server 2014 SP1

Informazioni sugli aggiornamenti cumulativi per SQL Server:

Ogni nuovo aggiornamento cumulativo per SQL Server contiene tutti gli aggiornamenti rapidi e tutte le correzioni per la sicurezza inclusi nell'aggiornamento cumulativo precedente. Scopri gli aggiornamenti cumulativi più recenti per SQL Server:

Ultimo aggiornamento cumulativo per SQL Server 2017

Ultimo aggiornamento cumulativo per SQL Server 2016

Ultimo aggiornamento cumulativo per SQL Server 2014

Stato

Microsoft ha confermato che si tratta di un problema nei prodotti Microsoft elencati nella sezione "Si applica a"

Riferimenti

Informazioni sulla terminologia utilizzata da Microsoft per descrivere gli aggiornamenti software.