문자 데이터 자동 변환
SQL_C_CHAR로 선언된 ANSI 문자 변수와 같은 문자 데이터나 char, varchar 또는 text 데이터 형식을 사용하여 SQL Server에 저장된 데이터는 제한된 수의 문자만 나타낼 수 있습니다. 즉, 문자당 1바이트를 사용하여 저장된 문자 데이터는 246자만 나타낼 수 있습니다. SQL_C_CHAR 변수에 저장된 값은 클라이언트 컴퓨터의 ACP(ANSI 코드 페이지)를 사용하여 해석되고, char, varchar 또는 text 데이터 형식을 사용하여 서버에 저장된 값은 서버의 ACP를 사용하여 계산됩니다.
서버와 클라이언트 둘 다에서 동일한 ACP를 사용하면 SQL_C_CHAR, char, varchar 또는 text 개체에 저장된 값을 해석할 때 문제가 발생하지 않습니다. 그러나 서버와 클라이언트에서 서로 다른 ACP를 사용하면 클라이언트의 SQL_C_CHAR 데이터가 char, varchar 또는 text 열, 변수, 매개 변수에 사용될 경우 서버에서 다른 문자로 해석될 수 있습니다. 예를 들어 값 0xA5가 포함된 문자 바이트가 코드 페이지 437을 사용하는 컴퓨터에서는 Ñ 문자로 해석되고 코드 페이지 1252를 사용하는 컴퓨터에서는 엔화 기호(¥)로 해석됩니다.
유니코드 데이터는 문자당 2바이트를 사용하여 저장됩니다. 유니코드 사양에 따라 모든 확장 문자가 처리되기 때문에 모든 유니코드 문자는 컴퓨터에 관계없이 동일하게 해석됩니다.
SQL Server Native Client ODBC 드라이버의 AutoTranslate 기능은 서로 다른 코드 페이지를 사용하는 클라이언트와 서버 간에 문자 데이터를 이동할 때 발생할 수 있는 문제를 최소화합니다. AutoTranslate는 SQLDriverConnect의 연결 문자열이나 SQLConfigDataSource의 구성 문자열에 설정하거나 ODBC 관리자를 사용하여 SQL Server Native Client ODBC 드라이버의 데이터 원본을 구성할 때 설정할 수 있습니다.
AutoTranslate를 "no"로 설정하면 클라이언트의 SQL_C_CHAR 변수와 SQL Server 데이터베이스의 char, varchar 또는 text 열, 변수, 매개 변수 간에 이동되는 데이터가 변환되지 않습니다. 데이터에 확장 문자가 포함되어 있고 클라이언트 컴퓨터와 서버 컴퓨터에서 서로 다른 코드 페이지를 사용하면 두 컴퓨터에서 비트 패턴이 서로 다르게 해석될 수 있습니다. 그러나 두 컴퓨터에서 동일한 코드 페이지를 사용하면 데이터가 동일하게 해석됩니다.
AutoTranslate를 "yes"로 설정하면 SQL Server Native Client ODBC 드라이버가 다음과 같이 유니코드를 사용하여 클라이언트의 SQL_C_CHAR 변수와 SQL Server 데이터베이스의 char, varchar 또는 text 열, 변수, 매개 변수 간에 이동되는 데이터를 변환합니다.
데이터를 클라이언트의 SQL_C_CHAR 변수에서 SQL Server 데이터베이스의 char, varchar 또는 text 열, 변수, 매개 변수에 보내면 ODBC 드라이버가 먼저 클라이언트의 ACP를 사용하여 SQL_C_CHAR를 유니코드로 변환한 다음 다시 서버의 ACP를 사용하여 유니코드를 문자열로 변환합니다.
데이터를 SQL Server 데이터베이스의 char, varchar 또는 text 열, 변수, 매개 변수에서 클라이언트의 SQL_C_CHAR 변수로 보내면 SQL Server Native Client ODBC 드라이버가 먼저 서버의 ACP를 사용하여 문자를 유니코드로 변환한 다음 다시 클라이언트의 ACP를 사용하여 유니코드를 SQL_C_CHAR로 변환합니다.
이러한 모든 변환 작업이 클라이언트에서 실행되는 SQL Server Native Client ODBC 드라이버를 통해 수행되기 때문에 서버 ACP는 클라이언트 컴퓨터에 설치된 코드 페이지 중 하나여야 합니다.
유니코드를 통해 문자를 변환하면 두 코드 페이지에 있는 모든 문자가 올바로 변환됩니다. 문자가 한 코드 페이지에만 있고 다른 한 코드 페이지에는 없는 경우 대상 코드 페이지에서 해당 문자를 나타낼 수 없습니다. 예를 들어 코드 페이지 1252에는 등록 상표 기호(®)가 있지만 코드 페이지 437에는 없습니다.
다음과 같은 변환 작업은 AutoTranslate 설정의 영향을 받지 않습니다.
SQL_C_CHAR 클라이언트 변수와 SQL Server 데이터베이스의 유니코드 nchar, nvarchar 또는 ntext 열, 변수, 매개 변수 간 데이터 이동
유니코드 SQL_C_WCHAR 클라이언트 변수와 SQL Server 데이터베이스의 문자 char, varchar 또는 text 열, 변수, 매개 변수 간 데이터 이동
데이터를 문자에서 유니코드로 이동할 때는 항상 변환해야 합니다.