╚ Impossibile convertire correttamente i dati di carattere da un client a un server tramite il driver di ODBC di SQL Server se la pagina di codice del client Ŕ diversa dalla tabella codici del server

Traduzione articoli Traduzione articoli
Identificativo articolo: 234748 - Visualizza i prodotti a cui si riferisce l?articolo.
Espandi tutto | Chiudi tutto

Sintomi

Quando si utilizza MDAC 2.1 o versione successiva del driver ODBC di SQL Server (versione 3.70.0623 o versione successiva) o il provider OLE DB (versione 7.01.0623 o versione successiva), in alcune circostanze possono verificarsi conversione dei caratteri di dati dalla tabella codici client alla pagina di codice del server, anche quando Autotranslation disabilitato per la connessione.

Cause

Autotranslation non Ŕ l'unico meccanismo pu˛ comportare la conversione del codice pagina. Il driver ODBC di SQL Server 7.0 e il provider OLEDB di introdurre un nuovo comportamento durante la connessione a MSDE 1.0, SQL Server 7.0 o versioni successive di uno. Tutte le istruzioni SQL inviate come un evento del linguaggio vengono convertite in Unicode sul client prima di essere inviati al server. Di conseguenza finale Ŕ simile a un Autotranslation di flusso dal client al server tramite un evento del linguaggio, indipendentemente dall'impostazione Autotranslation corrente per la connessione di tutti i dati. Non presenterÓ alcuna difficoltÓ ad eccezione di quando si tenta di memorizzare i dati carattere non convertito da una pagina codice diverso da una tabella codici di SQL Server.

Workaround

Non memorizzare dati X della tabella codici in una pagina codice Y SQL Server (ad esempio, codice pagina 950 dati in un server di codice pagina 1252). Mentre questo era possibile in alcune circostanze con le versioni precedenti di SQL Server, Ŕ sempre stato non supportato. A un server SQL 1252, qualsiasi valore tranne 1252 un carattere non dati carattere valido. I dati di una tabella codici diversa tipo carattere non Unicode non verranno ordinati correttamente e in caso di dati di a byte doppio (DBCS), SQL Server non riconosce i limiti di caratteri correttamente. Ci˛ pu˛ provocare significativi problemi, ad esempio il problema descritto nel seguente articolo della Microsoft Knowledge Base riportato di seguito:
155723INF: Troncamento di SQL Server di una stringa DBCS
La scelta ottimale per codici di SQL Server Ŕ la tabella codici dei client che accedono al server.

Il server e il client pu˛ avere tabelle codici diverse, ma Ŕ necessario assicurarsi il che Autotranslation sia abilitato sul client in modo da ottenere conversione corretta dei dati da e verso codici ?s il server in tutti i casi.

Se il server Ŕ necessario memorizzare i dati da pi¨ pagine di codice, la soluzione supportata Ŕ per memorizzare i dati in colonne Unicode (NCHAR/NVARCHAR o NTEXT).

Se la situazione specifica richiede la memorizzare dati di pagina X di codice in una pagina codice Y SQL Server, sono disponibili solo due modi per eseguire questa operazione in modo affidabile.
  • Archiviare i dati nelle colonne colonne binari (BINARY/VARBINARY o IMAGE).
  • Scrivere l'applicazione per utilizzare chiamate di procedura remota (RPC, Remote Procedure Call) per tutte le istruzioni SQL che gestiscono i dati di tipo carattere. Dati inviati attraverso un evento RPC non sono soggette a questa conversione. Si noti che non a livello DSN che Ŕ possibile eseguire per modificare il tipo di eventi inviati o driver. Se un comando viene inviato come un linguaggio o un evento RPC dipende interamente dal API e sintassi scelto dal programmatore per l'applicazione Ŕ scritta.

Informazioni

Autotranslation (vale a dire le ? caselle di eseguire la conversione dei dati di tipo di carattere"controllo nelle applicazioni ODBC pi¨ recente) converte i dati di tipo carattere da pagina di codice del client alla pagina di codice del server prima di inviare i dati del server, utilizzando Unicode come supporto di conversione. Tuttavia, il driver ODBC di SQL Server 3.7 converte inoltre tutte le istruzioni SQL inviate come evento del linguaggio in Unicode prima inserendoli in rete, che ha un effetto simile a Autotranslation ma non Ŕ regolato dall'impostazione Autotranslation. Al contrario, i codici di carattere flusso dal server al rispetto del client il flag Autotranslation; se Autotranslation Ŕ disattivata per i dati di dati raggiunge l'applicazione client con lo stesso carattere come dati di stato sul server. Conversione dei dati per eventi di client a server RPC in modo analogo, pu˛ essere disattivato disattivando Autotranslation. Segue un semplice script che illustra l'effetto di questo comportamento eventi del linguaggio. Questo esempio Ŕ stato eseguito da Query Analyzer su un client di pagina 1252 di codice si connette a un server di codice pagina 437:
-- Turn Autotranslation off here.
    USE tempdb
    GO
    CREATE TABLE t1 (c1 int, c2 char(1))
    GO
    
    -- Enter a yen character, using the keystroke ALT-0165.
    INSERT INTO t1 VALUES (1, 'ą') 
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1           Ł    157
        
        (1 row(s) affected)
Tenere presente nell'esempio precedente quanto segue:
  • Anche se Autotranslation Ŕ spento durante questo batch, il codice di carattere 165 (yen nella tabella codici 1252) Ŕ stato convertito 157 (yen nella tabella codici 437). Infatti il driver ODBC convertito la stringa SQL in Unicode prima dell'invio del server, in modo che il server non Ŕ in grado di convertire nel carattere appropriato per l'archiviazione nella tabella codici 437.
  • Quando il client viene eseguito un SELECT per recuperare i dati solo erano stati memorizzati, il carattere 157 arrivato non convertiti nel client (157 visualizzato come casella di "Ł" in un client di codice pagina 1252). Infatti, la conversione descritta in questo articolo solo per dati inviati dal client al server, non dal server al client. I dati non Ŕ stato tradotto perchÚ l'impostazione Autotranslation Ŕ disattivato.

-- Turn Autotranslation back on before running the following batch.
    INSERT INTO t1 VALUES (2, 'ą')
    SELECT c1, c2, ASCII (c2) FROM t1
c1          c2               
        ----------- ---- ----------- 
        1           ą    157
        2           ą    157
        
        (2 row(s) affected)
In questo caso, attivazione Autotranslation non avuto alcun effetto durante la conversione dal client al server (vale a dire la traduzione corretta stessa dal codice di carattere 165 al codice carattere 157 evento), ma dispone di un effetto sui dati recuperati dal server. Si noti che quando l'istruzione SELECT viene eseguita questa volta (con Autotranslation su), i simboli di yen visualizzare correttamente nell'applicazione 1252 pagina codice perchÚ Ŕ stato tradotto dal codice di carattere 157 al codice di carattere 165 dal meccanismo di Autotranslation.

Questo comportamento (conversione di eventi del linguaggio per Unicode sul client) verrÓ visualizzato quando tramite qualsiasi ODBC di SQL Server driver versione 3.70 o versioni successive e connessione a SQL Server 7.0 o versioni successive. Non si verifica quando si utilizza i driver ODBC meno recenti o quando si utilizza il driver 3.7 per connettersi a SQL Server 6.5 o versioni precedenti. Inoltre, se si archiviano i dati in colonne Unicode (NCHAR/NVARCHAR o NTEXT) la conversione non Ŕ un problema.
Per ulteriori informazioni sulle modalitÓ di rappresentazione dei dati di tipo carattere in SQL Server 2005, fare clic sul numero dell'articolo della Microsoft Knowledge Base riportato di seguito riportato:
904803I dati di carattere vengono rappresentati in modo non corretto quando la tabella codici del computer client Ŕ diversa dalla tabella codici del database in SQL Server 2005

ProprietÓ

Identificativo articolo: 234748 - Ultima modifica: giovedý 22 febbraio 2007 - Revisione: 4.3
Le informazioni in questo articolo si applicano a:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft Open Database Connectivity 3.7
  • Microsoft Data Engine 1.0
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Chiavi:á
kbmt kbprb KB234748 KbMtit
Traduzione automatica articoli
Il presente articolo Ŕ stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non Ŕ sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, pi¨ o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non Ŕ la sua. Microsoft non Ŕ responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 234748
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com