Pomocí ovladač SQL Server ODBC driver Pokud znaková stránka klienta liší od kódu stránky serveru nelze správně přeložit znak dat z klienta na server

Překlady článku Překlady článku
ID článku: 234748 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Při použití MDAC 2.1 nebo novější verzi ovladače SQL Server ODBC (verze 3.70.0623 nebo vyšší) nebo zprostředkovatel OLEDB (verze 7.01.0623 nebo novější), za určitých okolností může dojít k překlad data znak ze znakové stránky klienta stránky kód serveru i když Autotranslation je zakázána pro připojení.

Příčina

Autotranslation není pouze mechanismus, který může mít za následek převod znakových stránek. Ovladač SQL Server 7.0 ODBC a zprostředkovateli OLEDB zavádět nové chování při připojování k MSDE 1.0, SQL Server 7.0 nebo novější verze buď. Všechny příkazy SQL odeslána jako jazyk událostí jsou převedeny na Unicode na klienta před odesláním na server. Důsledkem ukončení tohoto podobný Autotranslation všech dat pokračuje ve směru od klienta k serveru prostřednictvím jazyka událost, bez ohledu na aktuální nastavení Autotranslation pro připojení. Není to zavádět jakékoli potíže s výjimkou při pokusu o uložení dat nejsou přeloženy znak ze znakové stránky než stránce kód SQL Server.

Jak potíže obejít

Data X kód stránky neukládejte v kódové stránce A SQL Server (například kód stránky 950 data v serveru kód stránka 1252). Když to bylo možné za určitých okolností s předchozí verze serveru SQL, jej byl vždy nepodporované. 1252 SQL Server ale jakékoli 1252 znak není platný znak data. Znak Unicode bez dat z jiný kód stránky řazeny není správně a z dvou bajtů dat (DBCS), SQL Server nerozpozná znak hranice správně. To může způsobit závažné potíže, například popsané v následujícím článku databáze Microsoft Knowledge Base:
155723INF: SQL Server zkrácení řetězce DBCS
Nejvhodnější volba serveru SQL znaková stránka je stránka kód klienti přístup na server.

Server a klient může mít různé znakové stránky, ale musíte zajistit Autotranslation je povolena na klienta tak, aby získat správný překlad dat na server kód stránky a ve všech případech.

Pokud váš server musí ukládat data z více znakových stránek, k ukládání dat ve sloupcích Unicode (NCHAR a NVARCHAR/NTEXT) je podporované řešení.

Pokud situace vyžaduje ukládání dat stránky X kód v kódové stránce A SQL Server, jsou proveďte spolehlivě pouze dva způsoby:
  • Uložení dat ve sloupcích binární sloupců (BINARY a VARBINARY/IMAGE).
  • Zapsat aplikace používat vzdálené volání procedur (RPC) pro všechny příkazy SQL zacházet s znaková data. Data odeslaná prostřednictvím události RPC není podléhají tento převod. Všimněte si, že je nic úrovni ovladač nebo DSN, pomocí kterých můžete změnit typ události, které jsou právě odesílány. Zda je příkaz odeslán jako jazyk nebo událost RPC zcela závisí na API a syntaxi zvolili podle programátor při zápisu aplikace.

Další informace

Autotranslation (to znamená text provést překlad pro data znak"políček v novější aplikací ODBC) převede znaková data ze stránky kód klienta stránky kód serveru před odesláním dat na server pomocí jako střední překladu Unicode. 3,7 Ovladač SQL Server ODBC driver je však také převede všechny příkazy SQL odeslaných jako jazyk událost Unicode před umístěním v telegrafickém, která má efekt je podobný Autotranslation, ale nastavení Autotranslation konzorciem. Naproti tomu kódy znak dorazí dat pokračuje ve směru od serveru zpět ohledu klienti příznak Autotranslation; Pokud Autotranslation vypnuto data aplikaci klienta s stejný znak jako data měla na serveru. Podobně lze vypnutím Autotranslation zakázat překlad data události klient server RPC. Následuje jednoduchý skript, který demonstruje, jak toto chování ovlivňuje jazyk události. Tento příklad byla spuštěna ze Query Analyzer klienta stránka 1252 kód připojování k serveru kód stránky 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)
Poznámka: následující o předchozím příkladu:
  • Přestože Autotranslation byl vypnutý během této dávkové úlohy, kód znaku 165 (jenu v kódová stránka 1252) byl převeden do 157 (jenu v znakovou stránku 437). Toto je, protože ovladač ODBC převést řetězec SQL Unicode před odesláním server, aby bylo možné převést příslušný znak úložiště znakovou stránku 437 serveru.
  • Při spuštění klienta SELECT k načtení dat, které bylo právě byly uloženy, znak 157 přijaty bez přeloženy klienta (157 pořady nahoru jako pole "?" na klienta kód stránka 1252). Důvodem je, že převod popisované v tomto článku platí pouze pro data odesílaná z klienta na server, nikoli ze serveru na klienta. Data není přeložen, protože je vypnuto nastavení Autotranslation.

-- 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)
V tomto případě opětovné zapnutí Autotranslation měl žádný vliv na překlad z klienta na server (tj stejné správný překlad z kódu znaku 165 do kódu znaku 157 došlo), ale mají vliv na data načtená ze serveru. Poznámka: Jestliže příkazu SELECT je spustit tento čas (s Autotranslation), symboly jenu zobrazit správně v aplikaci kód stránka 1252 protože mohou mít byla přeložit z kódu znaku 157 zpět na kód znaku 165 mechanismem Autotranslation.

Toto chování (převod událostí jazyka Unicode na straně klienta) se zobrazí při použití libovolné SQL Server ODBC ovladač verze 3.70 nebo novější a připojování SQL Server 7.0 nebo novější. Není dojít při použití starší ovladače ODBC nebo při použití ovladače 3,7 připojit k serveru SQL Server 6.5 nebo starším. Navíc pokud jsou uložením dat ve sloupcích Unicode (NCHAR a NVARCHAR/NTEXT) převodu nebude problém.
Další informace o způsobu znak data reprezentována v SQL Server 2005 klepněte na následující číslo článku databáze Microsoft Knowledge Base:
904803Znak data jsou reprezentována nesprávně při znaková stránka počítače klienta se liší od kódu stránky databáze SQL Server 2005

Vlastnosti

ID článku: 234748 - Poslední aktualizace: 22. února 2007 - Revize: 4.3
Informace v tomto článku jsou určeny pro produkt:
  • 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
Klíčová slova: 
kbmt kbprb KB234748 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:234748

Dejte nám zpětnou vazbu

 

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