Condividi tramite


Conversione automatica dei dati di tipo carattere

I dati di tipo carattere, ad esempio le variabili dei caratteri ANSI dichiarate con SQL_C_CHAR o i dati archiviati in SQL Server mediante i tipi di dati char, varcharo 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 i tipi di dati char, varcharo text sul server vengono valutati mediante la tabella codici ANSI del server.

Se il server e il client dispongono entrambi della stessa tabella codici ANSI, l'interpretazione dei valori archiviati negli oggetti SQL_C_CHAR, char, varcharo text avviene senza problemi. Se invece le tabelle codici ANSI sono diverse, i dati SQL_C_CHAR del client possono essere interpretati come un carattere diverso sul server se utilizzati in colonne, variabili o parametri di tipo char, varcharo text. Un byte carattere che contiene il valore 0xA5, ad esempio, viene interpretato come Ñ in un computer che utilizza la tabella codici 437 e come il simbolo dello 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 che si verificano durante lo spostamento di dati di tipo carattere tra un client e un server che dispongono di tabelle codici diverse. Tale funzionalità può essere impostata nella stringa di connessione di SQLDriverConnect, nella stringa di configurazione di SQLConfigDataSource o durante la configurazione di origini dati relative al driver ODBC di SQL Server Native Client mediante l'Amministratore ODBC.

Quando AutoTranslate è impostata su "no", non viene effettuata alcuna conversione sui dati spostati tra le variabili SQL_C_CHAR presenti sul client e le colonne, le variabili o i parametri di tipo char, varcharo text di 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 è impostata su "sì", il driver ODBC di SQL Server Native Client utilizza Unicode per convertire i dati spostati tra le variabili SQL_C_CHAR presenti sul client e le colonne, le variabili o i parametri di tipo char, varcharo text di un database di SQL Server.

  • Quando i dati vengono inviati da una variabile SQL_C_CHAR presente sul client a una colonna, variabile o parametro di tipo char, varchar o text di un database di SQL Server, il driver ODBC esegue prima la conversione da SQL_C_CHAR a Unicode mediante la tabella codici ANSI del client, quindi da Unicode al carattere utilizzando la tabella codici ANSI del server.

  • Quando i dati vengono inviati da una colonna, variabile o parametro di tipo char, varchar o text di un database di SQL Server a una variabile SQL_C_CHAR presente sul client, il driver ODBC di SQL Server Native Client esegue prima la conversione dal carattere a Unicode mediante la tabella codici ANSI del server, quindi da Unicode a SQL_C_CHAR utilizzando la tabella codici ANSI del client.

Poiché tutte le conversioni vengono effettuate dal driver ODBC di SQL Server Native Client in esecuzione sul client, la tabella codici ANSI del server deve corrispondere a 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 variabili del client SQL_C_CHAR dei caratteri e colonne, variabili o parametri di tipo nchar, nvarcharo ntext Unicode dei database di SQL Server.

  • Spostamento di dati tra variabili del client SQL_C_WCHAR Unicode e colonne, variabili o parametri di tipo char, varcharo text dei caratteri dei database di SQL Server.

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