Condividi tramite


Conversione automatica dei dati di tipo carattere

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

I dati di tipo carattere, ad esempio le variabili carattere ANSI dichiarate con SQL_C_CHAR o dati archiviati in SQL Server usando i tipi di dati char, varchar o text , possono rappresentare solo un numero limitato di caratteri. I dati di tipo carattere archiviati utilizzando un byte per carattere possono rappresentare solo 256 caratteri. I valori archiviati nelle variabili SQL_C_CHAR vengono interpretati mediante la tabella codici ANSI (ACP) del computer client. I valori archiviati utilizzando tipi di dati char, varchar o text nel server vengono valutati utilizzando l'ACP del server.

Se il server e il client hanno lo stesso ACP, non hanno problemi nell'interpretare i valori archiviati in SQL_C_CHAR, char, varchar o text . Se il server e il client hanno ACL diversi, SQL_C_CHAR dati del client possono essere interpretati come un carattere diverso nel server se viene usato in colonne di tipo char, varchar o text , variabili o parametri. Ad esempio, un byte di carattere contenente il valore 0xA5 viene interpretato come il carattere Ñ in un computer che usa la tabella codici 437 e viene interpretato come il segno yen (++) in un computer che esegue la tabella codici 1252.

I dati Unicode vengono archiviati utilizzando due byte per carattere. Poiché tutti i caratteri estesi sono inclusi nella specifica Unicode, tutti i caratteri Unicode vengono interpretati allo stesso modo da tutti i computer.

La funzionalità AutoTranslate del driver ODBC di SQL Server Native Client tenta di ridurre al minimo i problemi di spostamento dei dati di tipo carattere tra un client e un server con tabelle codici diverse. AutoTranslate può essere impostato nella stringa di connessione di SQLDriverConnect, nella stringa di configurazione di SQLConfigDataSource o durante la configurazione delle origini dati per il driver ODBC di SQL Server Native Client tramite l'amministratore ODBC ODBC.

Quando AutoTranslate è impostato su "no", non vengono eseguite conversioni sui dati spostati tra le variabili SQL_C_CHAR nel client e nelle colonne di tipo char, varchar o text , variabili o parametri in un database di SQL Server. Se i dati contengono caratteri estesi e i due computer dispongono di tabelle codici diverse, gli schemi di bit potrebbero essere interpretati in modo diverso sui computer client e server. I dati verranno interpretati nello stesso modo se entrambi computer dispongono della stessa tabella codici.

Quando AutoTranslate è impostato su "sì", il driver ODBC di SQL Server Native Client usa Unicode per convertire i dati spostati tra SQL_C_CHAR variabili nel client e colonne di tipo char, varchar o text , variabili o parametri in un database di SQL Server:

  • Quando i dati vengono inviati da una variabile SQL_C_CHAR sul client a una colonna char, varchar o text , variabile o parametro in un database di SQL Server, il driver ODBC esegue prima la conversione da SQL_C_CHAR a Unicode usando l'ACP del client, quindi da Unicode al carattere utilizzando l'ACP del server.

  • Quando i dati vengono inviati da una colonna char, varchar o text , una variabile o un parametro in un database di SQL Server a una variabile SQL_C_CHAR nel client, il driver ODBC di SQL Server Native Client converte prima da carattere a Unicode usando l'ACP del server, quindi da Unicode a SQL_C_CHAR utilizzando l'ACP del client.

Poiché tutte queste conversioni vengono eseguite dal driver ODBC di SQL Server Native Client in esecuzione nel client, il server ACP deve essere una delle tabelle codici installate nel computer client.

L'utilizzo di Unicode consente di eseguire la conversione più appropriata di tutti i caratteri presenti in entrambe le tabelle codici. Se tuttavia un carattere esiste in una tabella codici ma non in un'altra, non può essere rappresentato nella tabella codici di destinazione. Il simbolo del marchio registrato (®), ad esempio, è presente nella tabella codici 1252, ma non nella tabella codici 437.

L'impostazione di AutoTranslate non ha effetto sulle conversioni seguenti:

  • Spostamento di dati tra caratteri SQL_C_CHAR variabili client e colonne Unicode nchar, nvarchar o ntext, variabili o parametri nei database di SQL Server.

  • Spostamento di dati tra unicode SQL_C_WCHAR variabili client e colonne di tipo carattere, varchar o testo, variabili o parametri nei database di SQL Server.

I dati devono essere sempre convertiti nel passaggio da carattere a Unicode.

Vedi anche

Risultati dell'elaborazione (ODBC)
Regole di confronto e supporto Unicode