Share via


데이터 정렬 및 국가별 용어

SQL Server의 데이터 정렬은 데이터에 대한 정렬 규칙과 대/소문자 및 악센트 구분 속성을 제공합니다. char 및 varchar와 같은 문자 데이터 형식과 함께 사용되는 데이터 정렬은 해당 데이터 형식을 나타내는 데 사용할 수 있는 코드 페이지와 해당 문자를 지정합니다. 새 SQL Server 인스턴스를 설치하든 데이터베이스 백업을 복원하든 서버를 클라이언트 데이터베이스에 연결하든 사용할 데이터의 로캘 요구 사항, 정렬 순서, 대/소문자 및 악센트 구분 여부를 파악해야 합니다.

서버, 데이터베이스, 열 또는 식에 대한 데이터 정렬을 선택하면 데이터에 일정한 특성이 부여되며, 이는 여러 데이터베이스 작업의 결과에 영향을 줍니다. 예를 들어 ORDER BY를 사용하여 쿼리를 작성할 경우 결과 집합의 정렬 순서는 쿼리의 식 수준에서 COLLATE 절에 지정되거나 데이터베이스에 적용된 데이터 정렬에 따라 달라집니다.

데이터 정렬에는 다음과 같은 특성이 일부 또는 전부 포함될 수 있습니다.

  • 대/소문자 구분

  • 악센트 구분

  • 일본어 가나 구분

  • 전자/반자 구분

SQL Server의 데이터 정렬 지원을 최대한 활용하려면 이 항목에 정의된 용어와 이러한 용어가 데이터의 특성과 어떻게 관련되는지를 이해해야 합니다.

용어

  • 데이터 정렬

  • 로캘

  • 유니코드

  • 코드 페이지

  • 데이터 형식

  • 정렬 순서

데이터 정렬

데이터 정렬은 데이터 집합의 각 문자를 나타내는 비트 패턴을 지정합니다. 또한 데이터 정렬은 데이터를 정렬하고 비교하는 규칙을 결정합니다. SQL Server는 여러 다른 데이터 정렬을 갖는 개체를 단일 데이터베이스에 저장하도록 지원합니다. 비유니코드 열의 경우 데이터 정렬 설정은 데이터에 대한 코드 페이지와 나타낼 수 있는 문자를 지정합니다. 유니코드가 아닌 열 간에 데이터를 이동하려면 원본 코드 페이지에서 대상 코드 페이지로 변환해야 합니다.

데이터 정렬 설정이 각기 다른 데이터베이스의 컨텍스트에서 Transact-SQL 문을 실행하면 그 결과가 달라질 수 있습니다. 가능한 경우 조직에서 표준화된 데이터 정렬을 사용하십시오. 그러면 모든 문자나 유니코드 식에서 명시적으로 데이터 정렬을 지정할 필요가 없습니다. 데이터 정렬 및 코드 페이지 설정이 다른 개체를 사용해야 할 경우 선행 정렬 우선 순위 규칙을 고려하도록 쿼리를 코딩하십시오. 자세한 내용은 선행 정렬 우선 순위(Transact-SQL)를 참조하십시오.

데이터 정렬은 언어를 구분하고, 대/소문자를 구분하고, 악센트를 구분하고, 일본어 가나를 구분하고, 전자/반자를 구분합니다.

SQL Server 데이터 정렬에는 다음과 같은 데이터 정렬 집합이 포함됩니다.

  • Windows 데이터 정렬
    Windows 데이터 정렬은 관련 Windows 시스템 로캘을 기반으로 문자 데이터 저장 규칙을 정의합니다. Windows 데이터 정렬의 경우 유니코드 데이터를 비교할 때와 동일한 알고리즘을 사용하여 비유니코드 데이터도 비교합니다. 기본 Windows 데이터 정렬 규칙은 사전 정렬이 적용될 때 사용되는 알파벳이나 언어를 지정하고 유니코드가 아닌 문자 데이터를 저장하는 데 사용되는 코드 페이지를 지정합니다. 유니코드 정렬과 비유니코드 정렬은 모두 특정 버전의 Windows에서 수행되는 문자열 비교와 호환됩니다. 따라서 SQL Server 내의 데이터 형식에서 일관성이 유지되고 개발자는 응용 프로그램에서 SQL Server에 사용되는 것과 동일한 규칙을 사용하여 문자열을 정렬할 수 있습니다. 자세한 내용은 설치 프로그램에서 데이터 정렬 설정을 참조하십시오.

  • 이진 데이터 정렬
    이진 데이터 정렬은 로캘 및 데이터 형식으로 정의된 코딩 값 시퀀스에 따라 데이터를 정렬합니다. 이때 대/소문자가 구분됩니다. SQL Server의 이진 데이터 정렬은 사용할 로캘과 ANSI 코드 페이지를 정의하며 이진 정렬 순서를 적용합니다. 이진 데이터 정렬은 비교적 간단하므로 응용 프로그램의 성능을 향상시키는 데 도움이 됩니다. 비유니코드 데이터 형식의 경우 데이터 비교는 ANSI 코드 페이지에 정의된 코드 포인트를 기준으로 수행됩니다. 유니코드 데이터 형식의 경우 데이터 비교는 유니코드 코드 포인트를 기준으로 수행됩니다. 유니코드 데이터 형식에서의 이진 데이터 정렬의 경우 데이터 정렬 시 로캘은 고려되지 않습니다. 예를 들어 Latin_1_General_BIN과 Japanese_BIN은 유니코드 데이터에서 사용할 때 동일한 정렬 결과를 생성합니다.

    이전 버전의 SQL Server에서 이진 데이터 정렬은 첫 번째 문자를 WCHAR로 비교한 후 바이트 단위 비교를 수행했습니다. 이전 버전과의 호환성을 위해 기존의 이진 데이터 정렬 의미 체계는 변경되지 않습니다.

    이 SQL Server 릴리스의 이진 데이터 정렬에는 순수 코드 포인트 비교 데이터 정렬 집합이 포함되어 있습니다. 이진 데이터 정렬로 마이그레이션하면 진정한 코드 포인트 비교 기능을 활용할 수 있으며, 새 응용 프로그램을 개발할 때는 이진 데이터 정렬을 사용해야 합니다. BIN2 접미사는 새로운 코드 포인트 데이터 정렬 의미 체계를 구현하는 데이터 정렬 이름을 식별합니다. 새로운 이진 정렬에서 BIN2에 해당하는 비교 플래그를 사용할 수도 있습니다. 자세한 내용은 BIN 및 BIN2 데이터 정렬 사용 지침을 참조하십시오.

  • SQL Server
    SQL Server 데이터 정렬(SQL_*)은 이전 버전의 SQL Server와 정렬 순서가 호환됩니다. 비유니코드에 대한 사전 정렬 규칙은 Windows 운영 체제에서 제공하는 정렬 루틴과 호환되지 않지만 유니코드 데이터의 정렬은 특정 버전의 Windows 정렬 규칙과 호환됩니다. SQL Server 데이터 정렬은 비유니코드 데이터와 유니코드 데이터에 대해 다른 비교 규칙을 사용하므로 기본 데이터 형식에 따라 동일한 데이터에 대한 비교 결과가 달라집니다. 자세한 내용은 SQL Server 데이터 정렬 사용을 참조하십시오.

    [!참고]

    SQL Server의 영어 인스턴스를 업그레이드할 때 기존 SQL Server 인스턴스와의 호환성을 위해 SQL Server 데이터 정렬(SQL_*)을 지정할 수 있습니다. SQL Server 인스턴스의 기본 데이터 정렬은 설치 중에 정의되므로 다음 사항에 해당하는 경우 데이터 정렬 설정을 신중하게 지정해야 합니다.

    • 응용 프로그램 코드가 이전 SQL Server 데이터 정렬의 동작에 의존할 경우

    • SQL Server 6.5 또는 SQL Server 7.0의 기존 설치와 함께 SQL Server 복제를 사용할 경우

    • 여러 언어를 반영하는 문자 데이터를 저장해야 하는 경우

다음 수준의 SQL Server 인스턴스에서 데이터 정렬을 설정할 수 있습니다.

  • 서버 수준 데이터 정렬
    기본 데이터 정렬은 SQL Server 설치 중에 설정되며 시스템 데이터베이스의 기본 데이터 정렬이 될 수도 있습니다. 유니코드 전용 데이터 정렬은 서버 수준 데이터 정렬로 지원되지 않으므로 SQL Server 설치 중에 선택할 수 없습니다.

    열 또는 데이터베이스 이외의 개체에 데이터 정렬을 할당한 후 개체를 삭제했다가 다시 만드는 경우를 제외하고는 데이터 정렬을 변경할 수 없습니다. SQL Server 인스턴스의 기본 데이터 정렬을 변경하는 대신 새 데이터베이스 또는 데이터베이스 열을 만들 때 데이터 정렬을 지정할 수 있습니다.

    SQL Server 인스턴스에 대한 서버 데이터 정렬을 쿼리하려면 다음 Transact-SQL SERVERPROPERTY 함수를 사용하십시오.

    SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
    

    서버에서 사용 가능한 모든 데이터 정렬을 쿼리하려면 다음 fn_helpcollations() 기본 제공 함수를 사용합니다.

    SELECT * from ::fn_helpcollations()
    
  • 데이터베이스 수준 데이터 정렬
    데이터베이스를 만들 때 CREATE DATABASE 문의 COLLATE 절을 사용하여 기본 데이터베이스 데이터 정렬을 지정할 수 있습니다. 데이터 정렬을 지정하지 않으면 데이터베이스에 model 데이터베이스의 기본 데이터 정렬이 할당됩니다. 모델 데이터베이스의 데이터 정렬은 SQL Server 인스턴스의 기본 데이터 정렬과 동일합니다.

    사용자 데이터베이스의 데이터 정렬은 다음과 같이 ALTER DATABASE 문을 사용하여 변경할 수 있습니다.

    ALTER DATABASE myDB COLLATE Greek_CS_AI
    

    데이터베이스의 현재 데이터 정렬은 다음과 같은 문을 사용하여 검색할 수 있습니다.

    SELECT CONVERT (varchar, DATABASEPROPERTYEX('database_name','collation'))
    

    [!참고]

    데이터베이스 수준 데이터 정렬을 변경해도 열 수준 또는 식 수준 데이터 정렬은 영향을 받지 않습니다.

  • 열 수준 데이터 정렬
    테이블을 만들 때 CREATE TABLE 문의 COLLATE 절을 사용하여 각 문자열 열에 대한 데이터 정렬을 지정할 수 있습니다. 데이터 정렬을 지정하지 않으면 열에 데이터베이스의 기본 데이터 정렬이 할당됩니다.

    열의 데이터 정렬은 다음과 같이 ALTER TABLE 문을 사용하여 변경할 수 있습니다.

    ALTER TABLE myTable ALTER COLUMN mycol NVARCHAR(10) COLLATE Greek_CS_AI
    
  • 식 수준 데이터 정렬
    식 수준 데이터 정렬은 문이 실행될 때 설정되며 결과 집합이 반환되는 방식에 영향을 줍니다. 따라서 ORDER BY 정렬 결과를 특정 로캘과 관련되게 할 수 있습니다. 다음과 같이 COLLATE 절을 사용하여 식 수준 데이터 정렬을 구현할 수 있습니다.

    SELECT name FROM customer ORDER BY name COLLATE Latin1_General_CS_AI
    

맨 위로 이동

로캘

로캘은 지역이나 문화권과 관련된 정보의 모음입니다. 여기에는 통용 언어의 이름과 식별자, 언어를 기록하는 데 사용되는 문자 및 문화권별 표기법 등이 포함될 수 있습니다. 데이터 정렬은 하나 이상의 로캘과 연결될 수 있습니다.

맨 위로 이동

유니코드

여러 언어를 반영하는 문자 데이터를 저장할 경우에는 비유니코드 데이터 형식(char, varchar 및 text) 대신 항상 유니코드 데이터 형식(nchar, nvarchar 및 ntext)을 사용하십시오.

비유니코드 데이터 형식에는 여러 가지 제한 사항이 있습니다. 이는 비유니코드 컴퓨터에서는 단일 코드 페이지만 사용할 수 있기 때문입니다. 유니코드를 사용하면 코드 페이지 변환이 별로 필요하지 않으므로 성능이 향상될 수 있습니다. 이러한 경우 유니코드 데이터 정렬이 서버 수준에서 지원되지 않으므로 데이터베이스, 열 또는 식 수준에서 유니코드 데이터 정렬을 개별적으로 선택해야 합니다.

클라이언트가 사용하는 코드 페이지는 운영 체제 설정에 따라 결정됩니다. Windows 2000, Windows XP, Windows Server 2003 또는 Windows Server 2008 운영 체제에서 클라이언트 코드 페이지를 설정하려면 제어판의 국가별 설정을 사용하십시오.

서버에서 클라이언트로 데이터를 이동할 때는 기존 클라이언트 드라이버에서 서버 데이터 정렬을 인식하지 못할 수 있습니다. 유니코드 서버에서 비유니코드 클라이언트로 데이터를 이동할 때 이러한 현상이 나타날 수 있습니다. 클라이언트 운영 체제를 업그레이드하여 기본 시스템 데이터 정렬을 업데이트하는 것이 가장 좋은 방법입니다. 클라이언트에 데이터베이스 클라이언트 소프트웨어가 설치되어 있는 경우에는 해당 데이터베이스 클라이언트 소프트웨어에 서비스 업데이트를 적용하는 것도 좋습니다.

또한 서버의 데이터에 대해 다른 데이터 정렬을 사용할 수도 있습니다. 클라이언트의 코드 페이지에 매핑될 데이터 정렬을 선택하십시오. 자세한 내용은 SQL Server 온라인 설명서의 "데이터 정렬 설정 및 변경" 항목을 참조하십시오.

유니코드 데이터 형식 또는 비유니코드 데이터 형식 사용과 관련된 문제점을 평가하려면 작업 시나리오를 테스트하여 사용자 환경에서 나타나는 성능 차이를 측정하십시오. 조직 전반의 시스템에 사용되는 데이터 정렬을 표준화하고 유니코드 서버 및 클라이언트를 배포하는 것이 좋습니다. 유니코드에 대한 자세한 내용은 유니코드 컨소시엄 웹 사이트를 참조하십시오.

대부분의 경우 SQL Server는 다른 서버나 클라이언트와 상호 작용하게 되며 조직에서는 응용 프로그램과 서버 인스턴스 간에 여러 데이터 액세스 표준을 사용할 수 있습니다. SQL Server 클라이언트는 다음의 두 가지 주요 유형 중 하나에 해당됩니다.

  • OLE DB 및 ODBC(Open Database Connectivity) 버전 3.7 이상을 사용하는 유니코드 클라이언트

  • DB-Library 및 ODBC 버전 3.6 이하를 사용하는 비유니코드 클라이언트

다음 표에서는 유니코드 서버 및 비유니코드 서버의 다양한 조합과 함께 다국어 데이터 사용에 대한 정보를 제공합니다.

서버

클라이언트

이점 또는 제한 사항

유니코드

유니코드

유니코드 데이터는 시스템 전체에서 사용되므로 이 시나리오는 검색한 데이터가 손상되지 않는 등 최상의 성능을 제공합니다. ADO(ActiveX Data Objects), OLE DB 및 ODBC 버전 3.7 이상이 여기에 해당됩니다.

유니코드

비유니코드

이 시나리오에서, 특히 새로운 운영 체제를 실행하는 서버와 이전 버전의 운영 체제에 이전 버전의 SQL Server를 실행하는 클라이언트 간의 연결에서는 데이터를 클라이언트 컴퓨터로 이동할 때 제한 사항 또는 오류가 발생할 수 있습니다. 서버의 유니코드 데이터는 데이터 변환을 위해 비유니코드 클라이언트의 해당 코드 페이지에 매핑을 시도합니다.

비유니코드

유니코드

다국어 데이터를 사용할 경우 이상적인 구성이 아닙니다. 유니코드 데이터를 비유니코드 서버에 쓸 수 없습니다. 서버의 코드 페이지를 벗어나는 서버로 데이터를 보낼 때 문제가 발생할 수 있습니다.

비유니코드

비유니코드

다국어 데이터를 사용할 때 가장 제한이 많은 시나리오입니다. 단일 코드 페이지만 사용할 수 있습니다.

서버에서 클라이언트로, 특히 유니코드 서버에서 비유니코드 클라이언트로 데이터를 이동할 때 오류 또는 문제가 발생하는 경우 서버 데이터 정렬이 이전 클라이언트 드라이버에서 인식되지 않을 수 있습니다. 이러한 경우 클라이언트 운영 체제를 업그레이드하여 기본 시스템 데이터 정렬을 업데이트하는 것이 가장 좋은 방법입니다. 클라이언트에 데이터베이스 클라이언트 소프트웨어가 설치되어 있는 경우에는 해당 데이터베이스 클라이언트 소프트웨어에 서비스 업데이트를 적용하는 것도 좋습니다.

또한 서버의 데이터에 대해 다른 데이터 정렬을 사용할 수도 있습니다. 클라이언트의 코드 페이지에 매핑될 데이터 정렬을 선택하십시오. 데이터 정렬 변경에 대한 자세한 내용은 SQL Server 온라인 설명서의 "SQL Server에서 데이터 정렬 설정 및 변경" 항목을 참조하십시오. 데이터 정렬 변경에 대한 자세한 내용은 "SQL Server Best Practices Collation Change" 백서를 참조하십시오. 비유니코드 데이터 형식을 유니코드로 마이그레이션하는 방법에 대한 자세한 내용은 "SQL Server Best Practices Migration to Unicode" 백서를 참조하십시오.

관련 항목:유니코드 기본 사항

맨 위로 이동

코드 페이지

코드 페이지는 지정한 스크립트의 각 문자와 연결된 숫자 인덱스 또는 코드 포인트 값을 정렬한 문자 집합입니다. Windows 코드 페이지는 일반적으로 문자 집합 또는 charset이라고 합니다. 코드 페이지는 여러 다른 Windows 시스템 로캘에 사용되는 문자 집합과 자판 배열을 지원하는 데 사용됩니다.

모든 Windows Server 2008 유니코드 데이터 정렬은 Unicode 5.0을 기반으로 합니다.

맨 위로 이동

데이터 형식

데이터 형식은 값 범위, 해당 값에 대해 수행할 수 있는 작업 및 메모리에 값이 저장되는 방식을 지정하는 정의입니다. 데이터 형식을 정의하면 SQL Server에서 예측 가능한 방식으로 데이터를 조작할 수 있습니다. 비유니코드 문자 데이터 형식은 char, varchar 및 text입니다. 유니코드 데이터 형식은 nchar, nvarchar 및 ntext입니다. 응용 프로그램에서는 유니코드 데이터 형식을 사용하는 것이 좋으며 여러 언어를 반영하는 문자 데이터를 저장하는 경우에는 더욱 그렇습니다.

비유니코드 데이터 형식을 유니코드로 마이그레이션하는 방법에 대한 자세한 내용은 "SQL Server Best Practices Migration to Unicode" 백서를 참조하십시오.

관련 항목:데이터 형식(데이터베이스 엔진), 데이터 형식(Transact-SQL), Integration Services 데이터 형식

맨 위로 이동

정렬 순서

정렬 순서는 데이터 값이 정렬되는 방식을 지정합니다. 이는 데이터 비교의 결과에 영향을 줍니다. 데이터는 데이터 정렬을 사용하여 정렬되며 인덱스를 사용하여 데이터 정렬을 최적화할 수 있습니다.

관련 항목:Windows 데이터 정렬 스타일, 인덱스

맨 위로 이동