Automatyczne tłumaczenie danych znaków

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Dane znakowe, takie jak zmienne znakowe ANSI deklarowane za pomocą SQL_C_CHAR lub dane przechowywane w SQL Server z użyciem typów char, varchar lub tekstowych, mogą reprezentować tylko ograniczoną liczbę znaków. Dane znaków przechowywane przy użyciu jednego bajtu na znak mogą reprezentować tylko 256 znaków. Wartości przechowywane w SQL_C_CHAR zmiennych są interpretowane za pomocą strony kodowej ANSI (ACP) komputera klienckiego. Wartości przechowywane na serwerze za pomocą char, varchar lub typów tekstowych są oceniane za pomocą ACP serwera.

Jeśli zarówno serwer, jak i klient mają ten sam ACP, nie mają problemów z interpretacją wartości przechowywanych w obiektach SQL_C_CHAR, char, varchar lub tekstowych . Jeśli serwer i klient mają różne ACP, dane SQL_C_CHAR klienta mogą być interpretowane jako inny znak na serwerze, jeśli są używane w kolumnach, zmiennych lub parametrach char, varchar lub tekstu . Na przykład bajt znakowy zawierający wartość 0xA5 jest interpretowany jako znak Ñ na komputerze z pomocą strony kodowej 437 i interpretowany jako znak jena (¥) na komputerze uruchamiającym stronę kodową 1252.

Dane Unicode są przechowywane przy użyciu dwóch bajtów na znak. Wszystkie znaki rozszerzone są objęte specyfikacją Unicode, więc wszystkie znaki Unicode są interpretowane tak samo przez wszystkie komputery.

Funkcja AutoTranslate sterownika ODBC dla natywnego klienta SQL Server stara się zminimalizować problemy związane z przenoszeniem danych znaków między klientem a serwerem o różnych stronach kodu. AutoTranslate można ustawić w ciągu connect w SQLDriverConnect, w ciągu konfiguracyjnym SQLConfigDataSource lub podczas konfiguracji źródeł danych dla sterownika ODBC Native Client SQL Server za pomocą ODBC Administrator.

Gdy AutoTranslate jest ustawione na "nie", nie wykonuje się konwersji danych przenoszonych między SQL_C_CHAR zmiennymi na kliencie oraz kolumnami, zmiennymi lub parametrami char, varchar lub tekstem w SQL Server bazie danych. Wzorce bitowe mogą być interpretowane inaczej na komputerze klienckim i serwerowym, jeśli dane zawierają znaki rozszerzone, a oba komputery mają różne strony kodowe. Dane będą interpretowane tak samo, jeśli oba komputery mają tę samą stronę kodową.

Gdy AutoTranslate jest ustawiony na "tak", sterownik ODBC SQL Server Native Client używa Unicode do konwersji danych przenoszonych między SQL_C_CHAR zmiennymi na kliencie oraz kolumn, zmiennych lub parametrów char, varchar lub tekstu w bazie SQL Server:

  • Gdy dane są wysyłane z SQL_C_CHAR zmiennej na kliencie do kolumny, zmiennej lub parametru char, varchar lub tekstu w bazie danych SQL Server, sterownik ODBC najpierw konwertuje z SQL_C_CHAR do Unicode za pomocą ACP klienta, a następnie z Unicode z powrotem na znak za pomocą ACP serwera.

  • Gdy dane są wysyłane z kolumny, zmiennej lub parametru char, varchar lub tekstu w bazie danych SQL Server do zmiennej SQL_C_CHAR na kliencie, sterownik ODBC klienta SQL Server najpierw konwertuje ze znaku na Unicode za pomocą ACP serwera, a następnie z Unicode z powrotem na SQL_C_CHAR za pomocą ACP klienta.

Ponieważ wszystkie te konwersje są wykonywane przez sterownik ODBC natywnego klienta SQL Server wykonywany na kliencie, ACP serwera musi być jedną ze stron kodowych zainstalowanych na komputerze klienckim.

Konwersje znaków za pomocą Unicode zapewniają prawidłową konwersję wszystkich znaków istniejących na obu stronach kodowych. Jeśli jednak znak istnieje na jednej stronie kodowej, a na innej nie, to nie może być reprezentowany na docelowej stronie kodowej. Na przykład strona kodowa 1252 ma zarejestrowany symbol znaku towarowego (®), podczas gdy strona kodowa 437 nie.

Ustawienie AutoTranslate nie ma wpływu na te konwersje:

  • Przenoszenie danych między zmiennymi klienckimi znaków SQL_C_CHAR a kolumnami, zmiennymi lub parametrami Unicode nchar, nvarchar lub ntext w SQL Server bazach danych.

  • Przenoszenie danych między zmiennymi klienckimi Unicode SQL_C_WCHAR a znakami znakowymi, varchar lub kolumnami, zmiennymi lub parametrami tekstowymi w SQL Server bazach danych.

Dane zawsze muszą być konwertowane po przeniesieniu ze znaków do Unicode.