Zeichendaten von einem Client auf einem Server kann nicht ordnungsgemäß übersetzt werden, mithilfe des SQL Server-ODBC-Treibers verwenden, wenn die Client-Codepage von der Codepage des Servers unterscheidet

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 234748 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

Bei Verwendung der MDAC 2.1 oder eine höhere Version von SQL Server-ODBC-Treiber (Version 3.70.0623 oder höher) oder den OLE DB-Anbieter (Version 7.01.0623 oder höher), unter bestimmten Umständen Übersetzung der Zeichendaten von der Client-Codepage, die Servercodepage auch bei Auftreten Autotranslation für die Verbindung deaktiviert ist.

Ursache

Autotranslation ist nicht der einzige Mechanismus, der Codepagekonvertierung führen können. Stellen Sie die SQL Server 7.0-ODBC-Treiber und OLE DB-Provider ein neues Verhalten beim Verbinden mit MSDE 1.0, SQL Server 7.0 oder höhere Versionen von entweder vor. Alle SQL­Anweisungen, die als Sprachereignis gesendet werden auf dem Client in Unicode konvertiert, bevor an den Server gesendet werden. Die Auswirkungen dieser End ist vergleichbar mit einer Autotranslation aller Daten vom Client über ein Language-Ereignis, unabhängig von der aktuellen Einstellung der Autotranslation für die Verbindung an den Server übertragen. Dadurch werden Probleme außer möchten, dass beim Speichern von Zeichendaten aus einer Codepage als SQL Server-Codepage nicht übersetzt nicht vorgestellt.

Abhilfe

Speichern Sie keine Codepage-X-Daten in einer Codepage Y SQL Server (z. B. Code Seite 950 Daten in einem Code-Seite 1252 Server). Während dies in einigen Fällen mit früheren Versionen von SQL Server möglich war, wurde es immer nicht unterstützt. Zu einem 1252 SQL Server ist beliebig mit Ausnahme einer 1252 Zeichen gültige Zeichendaten. Nicht-Unicode-Zeichendaten aus einer anderen Codepage werden nicht korrekt sortiert werden; im Fall von zwei Byte (DBCS) Daten SQL Server erkennt keine Zeichen Grenzen korrekt. Dies kann erhebliche Probleme wie z. B. das in der folgenden Artikel der Microsoft Knowledge Base beschriebene Problem verursachen:
155723INF: SQLServer Abschneiden einer DBCS-Zeichenfolge
Am besten für SQL Server-Codepage ist die Codepage des Clients, die den Server zugegriffen wird.

Der Server und der Client möglicherweise unterschiedliche Codepages haben, aber Sie müssen sicherstellen, dass Autotranslation auf dem Client aktiviert ist, sodass Sie die ordnungsgemäße Übersetzung von Daten zu und von ?s Server-Codepage in allen Fällen erhalten.

Wenn Ihr Server Daten aus mehreren Codepages speichern muss, ist die unterstützte Lösung zum Speichern der Daten in Unicode-Spalten (NCHAR/NVARCHAR/NTEXT).

Wenn Ihre Situation erfordert, dass Sie Codepage X-Daten in einer Codepage Y SQL Server speichern, gibt es nur zwei Möglichkeiten dazu zuverlässig:
  • Speichern der Daten in binären Spalten (BINARY/VARBINARY/IMAGE) Spalten.
  • Schreiben Sie Ihre Anwendung mit Remoteprozeduraufrufen (RPCs) für alle SQL­Anweisungen, die mit Zeichendaten. Daten über eine RPC-Ereignisses gesendet unterliegt nicht diese Konvertierung. Beachten Sie, dass nichts auf Treiber oder DSN-Ebene, die Sie durchführen können, um die Art der gesendeten Ereignisse zu ändern. Gibt an, ob ein Befehl als eine Sprache oder RPC-Ereignisses gesendet wird hängt vollständig von der APIs und Syntax, die durch den Programmierer gewählt, wenn die Anwendung geschrieben wurde.

Weitere Informationen

Autotranslation (d. h. die ? Konvertierung für Zeichendaten ausführen"Kontrollkästchen in neuere ODBC-Anwendungen) konvertiert Zeichendaten von der Client-Codepage in der Codepage des Servers vor dem Senden der Daten an den Server als ein Mittel Übersetzung die Verwendung. 3.7 SQL Server-ODBC-Treiber konvertiert jedoch auch alle SQL­Anweisungen als Sprachereignis zu Unicode gesendet, bevor diese auf die Leitung, über einen Effekt, der ähnelt Autotranslation, aber unterliegt nicht durch die Einstellung der Autotranslation platziert werden. Im Gegensatz dazu codes Daten fließen vom Server an Clients Respekt, das Autotranslation-Flag, wenn die Daten Autotranslation deaktiviert ist an die Clientanwendung mit demselben Zeichen ankommen Zeichen wie die Daten auf dem Server hatte. Ebenso kann Übersetzung von Daten für Client-zu-Server RPC-Ereignisse durch Autotranslation deaktivieren deaktiviert werden. Ein einfaches Skript, das veranschaulicht, wie dieses Verhalten Sprachereignisse beeinflusst folgt. In diesem Beispiel wird von Query Analyzer auf einem Code-Seite 1252-Client Verbindung mit einem Code-Seite 437-Server ausgeführt wurde:
-- 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)
Beachten Sie Folgendes über das vorhergehende Beispiel:
  • Obwohl Autotranslation deaktiviert während dieser Stapel wurde, wurde der Zeichencode 165 (Yen in Codepage 1252) in 157 (Yen in Codepage 437) konvertiert. Dies ist, da der ODBC-Treiber die SQL-Zeichenfolge in Unicode, konvertiert vor dem Senden der der Server, sodass der Server kann es auf das entsprechende Zeichen für die Speicherung in Codepage 437 konvertiert wurde.
  • Wenn der Client eine SELECT zum Abrufen der Daten, die gerade gespeichert wurde ausgeführt, angekommen Zeichen 157 auf dem Client (157 angezeigt wird, als Feld "" auf einem Client Code Seite 1252) nicht übersetzt. Ist die Konvertierung in diesem Artikel beschriebenen gilt nur für Daten, die vom Client an den Server, nicht über den Server für den Client gesendet. Die Daten wurde nicht übersetzt werden, da die Autotranslation-Einstellung deaktiviert ist.

-- 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 diesem Fall keine Auswirkungen auf die Übersetzung vom Client an den Server mussten Autotranslation wieder aktivieren (d. h., die dieselbe korrekte Übersetzung von Zeichencode 165 in Zeichencode 157 geschehen,) aber eine Auswirkung auf die vom Server abgerufenen Daten. Beachten Sie, wenn die SELECT -Anweisung dieses Mal (mit Autotranslation auf) ausgeführt wird, Yen Symbole ordnungsgemäß in der Anwendung Code Seite 1252 anzeigen da Sie Zeichen-Code 157 an Zeichencode 165 durch Autotranslation Mechanismus übersetzt wurde haben.

Sie sehen dieses Verhalten (Konvertierung von Language-Ereignisse zu Unicode auf dem Client) bei jeder SQL Server ODBC-Treiber, Version 3.70 oder höher und Herstellen einer Verbindung zu SQL Server 7.0 oder höher verwenden. Es erfolgt keine Wenn ältere ODBC-Treiber verwenden, oder wenn der 3.7-Treiber mit Verbindung mit SQL Server 6.5 oder früher. Zusätzlich, wenn Sie Ihre Daten in Unicode-Spalten speichern werden (NCHAR/NVARCHAR/NTEXT) die Konvertierung kein Problem.
Informationen dazu, wie Zeichendaten in SQL Server 2005 dargestellt werden finden Sie im folgenden Artikel der Microsoft Knowledge Base:
904803Zeichendaten werden falsch dargestellt, wenn die Codepage des Clientcomputers von der Codepage der Datenbank in SQL Server 2005 unterscheidet

Eigenschaften

Artikel-ID: 234748 - Geändert am: Donnerstag, 22. Februar 2007 - Version: 4.3
Die Informationen in diesem Artikel beziehen sich auf:
  • 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
Keywords: 
kbmt kbprb KB234748 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 234748
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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