Nemôže správne preklad znakových údajov od klienta k serveru použitím ovládača SQL Server ODBC, ak kódová stránka klientov líši od servera kódová stránka

Preklady článku Preklady článku
ID článku: 234748 - Zobraziť produkty, ktorých sa tento článok týka.
Rozbaliť všetko | Zbaliť všetko

PRIZNAKY

Pri používaní MDAC 2.1 alebo novšej verzie ovládača SQL Server ODBC (verzia 3.70.0623 alebo neskôr) alebo poskytovateľ OLEDB (verzia 7.01.0623 alebo neskôr), za niektorých okolností môžu vyskytnúť preklad znakových údajov kódovej stránky pre klienta na server kódovú stránku, aj keď Autotranslation vypnutá pre pripojenie.

PRICINA

Autotranslation nie je jediným mechanizmom, ktoré môžu mať za následok kód stránky konverzie. Ovládač SQL Server 7.0 ODBC a OLEDB poskytovateľ zaviesť nové správanie pri pripájaní MSDE 1.0, SQL Server 7.0 alebo novších verziách buď. Všetky príkazy SQL odoslaná ako jazyk udalosti sa skonvertujú na Unicode na klienta pred odoslaním na server. Koniec efekt tohto je podobný Autotranslation všetkých údajov vyplývajúcich z klienta na server prostredníctvom jazyka udalosť bez ohľadu na aktuálne Autotranslation nastavenie pripojenia. To bude nesmie zaviesť akékoľvek ťažkosti, okrem prípadov, keď snaží uložiť dáta-preložené znakov kódovej stránky než SQL Server kódovú stránku.

RIEŠENIE

•Neprechovávajte kód stránky x údajov v kódovej stránke Y SQL Server (napríklad kód 950 údaje stránky v kód stránku 1252 server). Zatiaľ čo toto bolo možné za určitých okolností s predchádzajúcimi verziami programu SQL Server, to bolo vždy Nepodporované. 1252 SQL Server, ale nič 1252 znak nie je platný znak údajov. Non-Unicode znakových údajov z rôznych kódová stránka nebude zatriedená správne a u dvojaký-bajtové (DBCS) údajov, SQL Server nepozná znak hranice správne. To môže spôsobiť značné problémy ako napríklad problém popísaný v nasledujúcom článku databázy Microsoft Knowledge Base:
155723 INF: SQL Server skracovania reťazca DBCS
Najlepšou voľbou pre SQL Server kódová stránka je kódová stránka klientov, ktoré bude server.

Server a klient môže mať rôznych kódových stránok, ale musíte zabezpečiť, že Autotranslation je zapnuté na klienta, takže sa dostanete pri správnom preklade dát zo servera kódovú stránku vo všetkých prípadoch.

Ak váš server musí ukladať údaje z viacerých kódových stránok, podporované riešením je na ukladanie údajov v stĺpcoch Unicode (nText NCHAR/NVARCHAR / obsahujúce ODDELENÚ).

Ak vaša situácia vyžaduje, ukladať údaje stránky x kód v kódovej stránke Y SQL Server, existujú iba dva spôsoby, ako urobiť spoľahlivo:
  • Uložiť údaje v stĺpcoch binárne stĺpce (BINARY/VARBINÁRNE/obrázok).
  • Napísať vašu žiadosť použiť vzdialeného volania procedúr (vzdialené volania procedúr) pre všetky príkazy SQL, ktoré sa zaoberajú znakových údajov. Údaje odoslané cez udalosť RPC nie je predmetom tohto prepočtu. Všimnite si, že nie je nič na ovládač alebo DSN úrovni, ktoré môžete urobiť zmeniť typ udalosti odosiela. Či odošle príkaz ako jazyk alebo RPC udalosť závisí úplne na API a syntax zvolil programátora, keď žiadosť je napísané.

DALSIE INFORMACIE

Autotranslation (t. j. „vykonať preklad znakových údajov"políčok v novších ODBC aplikáciách) konvertuje znakových údajov z kódová stránka klientov servera kódová stránka pred odoslaním údajov na serveri pomocou Unicode ako preklad médium. 3.7 Ovládača SQL Server ODBC však tiež Konvertuje všetky príkazy SQL ako jazyk udalosti zaslať Unicode pred ich uvedením na drôt, ktorá má účinok, ktorý je podobný Autotranslation ale neupravujú Autotranslation nastavenie. Naproti tomu znakových údajov plynúcich zo servera späť na klientov rešpektovať Autotranslation vlajkou; Ak je vypnuté Autotranslation údaje dorazí klient aplikácia s rovnakým kódy znakov ako údaje mal na serveri. Podobne, preklad údajov pre klienta a servera RPC udalosti možno vypnúť vypnutie Autotranslation. Jednoduchý skript, ktorý demonštruje, ako toto správanie ovplyvňuje jazyk udalosti vyplýva. V tomto príklade bol spustený z analyzátor dotazu na kód stránku 1252 klientovi pripojenie na server stránku 437 kód:
-- 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)
Uvedomte si nasledujúcu o predchádzajúcom príklade:
  • Hoci Autotranslation bol vypnutý počas tejto dávke, kód znaku 165 (jen v kódovú stránku 1252) bol konvertovaný 157 (jen v kódovú stránku 437). To je, pretože ovládač ODBC konvertovať reťazec SQL na Unicode pred odoslaním server, tak server bol schopný konvertovať ho na príslušný znak pre skladovanie v kódovú stránku 437.
  • Keď klient běžel SELECT načítať údaje, ktoré prostě uložené, znak 157 dorazili non-preložené na klienta (157 ukazuje hore ako pole "?" na stránku 1252 klientovi kód). To je, pretože konverziu v tomto článku sa uplatňuje iba na údaje odoslané z klienta na server, a nie z server na klienta. Údaje sa neprekladajú, pretože Autotranslation nastavenie je vypnuté.

-- 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 prípade Autotranslation späť zapnutím nemal žiadny vplyv na preklad z klienta na server (t. j. rovnaké správny preklad z kód znaku 165 kód znaku 157 stalo), ale je to vplyv na údajov načítaných zo servera. Všimnite si, že keď SELECT výkaz je spustiť tento čas (s Autotranslation na), jen symboly správne zobrazovať v kód stránku 1252 žiadosti preto, že preložený z kód znaku 157 späť na kód znaku 165, Autotranslation mechanizmus.

Keď uvidíte toto správanie (konverziu jazyk udalosti na Unicode na klienta) pomocou akéhokoľvek SQL Server ODBC ovládač 3.70 alebo neskôr a pripájate k SQL Server 7.0 alebo novšiu verziu. To nenastane, ak používate staršie ovládače ODBC alebo pri používaní 3.7 vodiča pripojiť k SQL Server 6.5 alebo skôr. Okrem toho, ak sú uchovávaním údajov v stĺpcoch Unicode nText (NCHAR/NVARCHAR /) obsahujúce ODDELENÚ konverzie nebude problém.
Ďalšie informácie o ako znakových údajov je zastúpený v SQL Server 2005, po kliknutí na nasledovné číslo článku databázy Microsoft Knowledge Base:
904803Znakových údajov je zastúpený nesprávne, keď kódová stránka klientskeho počítača odlišuje od kódová stránka databáze v SQL Server 2005

Vlastnosti

ID článku: 234748 - Posledná kontrola: 23. októbra 2011 - Revízia: 2.0
Informácie v tomto článku sa týkajú nasledujúcich produktov:
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL 2005 Server Enterprise
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL 2005 Server Workgroup
Kľúčové slová: 
kbprb kbmt KB234748 KbMtsk
Strojovo preložené
DÔLEŽITÉ: Tento článok bol preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft, nie prekladateľom. Spoločnosť Microsoft ponúka články preložené prekladateľmi aj strojovo preložené články, vďaka čomu máte možnosť prístupu ku všetkým článkom databázy Knowledge Base vo svojom jazyku. Strojovo preložený článok však nie je vždy perfektný. Môže obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky, podobne ako cudzinec môže robiť chyby, keď rozpráva vašim jazykom. Spoločnosť Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené akýmkoľvek nepresným prekladom obsahu alebo jeho použitím zo strany zákazníkov. Spoločnosť Microsoft softvér na strojový preklad pravidelne aktualizuje.
Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem:234748

Odošlite odozvu

 

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