문자 데이터 자동 변환

적용 대상: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

문자 데이터(예: 문자, varchar 또는 텍스트 데이터 형식을 사용하여 SQL Server 저장된 데이터 또는 SQL_C_CHAR 사용하여 선언된 ANSI 문자 변수)는 제한된 수의 문자만 나타낼 수 있습니다. 즉, 문자당 1바이트를 사용하여 저장된 문자 데이터는 246자만 나타낼 수 있습니다. SQL_C_CHAR 변수에 저장된 값은 클라이언트 컴퓨터의 ACP(ANSI 코드 페이지)를 사용하여 해석되고, 서버의 char, varchar 또는 text 데이터 형식을 사용하여 저장된 값은 서버의 ACP를 사용하여 평가됩니다.

서버와 클라이언트 모두 동일한 ACP가 있는 경우 SQL_C_CHAR, char, varchar 또는 텍스트 개체에 저장된 값을 해석하는 데 아무런 문제가 없습니다. 서버와 클라이언트에 다른 ACL이 있는 경우 char, varchar 또는 텍스트 열, 변수 또는 매개 변수에 사용되는 경우 클라이언트의 SQL_C_CHAR 데이터가 서버에서 다른 문자로 해석될 수 있습니다. 예를 들어 0xA5 값을 포함하는 문자 바이트는 코드 페이지 437을 사용하여 컴퓨터에서 문자 Ñ로 해석되고 코드 페이지 1252를 실행하는 컴퓨터에서 엔 기호(\)로 해석됩니다.

유니코드 데이터는 문자당 2바이트를 사용하여 저장됩니다. 유니코드 사양에 따라 모든 확장 문자가 처리되기 때문에 모든 유니코드 문자는 컴퓨터에 관계없이 동일하게 해석됩니다.

SQL Server Native Client ODBC 드라이버의 AutoTranslate 기능은 클라이언트와 코드 페이지가 다른 서버 간에 문자 데이터를 이동하는 문제를 최소화하려고 시도합니다. AutoTranslate은 SQLDriverConnect의 연결 문자열, SQLConfigDataSource의 구성 문자열 또는 ODBC 관리자를 사용하여 SQL Server Native Client ODBC 드라이버에 대한 데이터 원본을 구성할 때 설정할 수 있습니다.

AutoTranslate을 "아니요"로 설정하면 클라이언트의 SQL_C_CHAR 변수와 char, varchar 또는 SQL Server 데이터베이스의 텍스트 열, 변수 또는 매개 변수 간에 이동된 데이터에 대한 변환이 수행되지 않습니다. 데이터에 확장 문자가 포함되어 있고 클라이언트 컴퓨터와 서버 컴퓨터에서 서로 다른 코드 페이지를 사용하면 두 컴퓨터에서 비트 패턴이 서로 다르게 해석될 수 있습니다. 그러나 두 컴퓨터에서 동일한 코드 페이지를 사용하면 데이터가 동일하게 해석됩니다.

AutoTranslate이 "예"로 설정된 경우 SQL Server Native Client ODBC 드라이버는 유니코드를 사용하여 클라이언트의 SQL_C_CHAR 변수와 SQL Server 데이터베이스의 char, varchar 또는 텍스트 열, 변수 또는 매개 변수 간에 이동된 데이터를 변환합니다.

  • 클라이언트의 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 Server 데이터베이스에서 문자 SQL_C_CHAR 클라이언트 변수와 유니코드 nchar, nvarchar 또는 ntext 열, 변수 또는 매개 변수 간에 데이터를 이동합니다.

  • 유니코드 SQL_C_WCHAR 클라이언트 변수와 문자 char, varchar 또는 SQL Server 데이터베이스의 텍스트 열, 변수 또는 매개 변수 간에 데이터를 이동합니다.

데이터를 문자에서 유니코드로 이동할 때는 항상 변환해야 합니다.

참고 항목

결과 처리(ODBC)
데이터 정렬 및 유니코드 지원