데이터베이스 데이터 정렬 설정 또는 변경

적용 대상:SQL ServerAzure SQL Managed Instance

이 문서에서는 SSMS(SQL Server Management Studio) 또는 Transact-SQL을 사용하여 데이터베이스 데이터 정렬을 설정하거나 변경하는 방법을 설명합니다. 데이터 정렬을 지정하지 않으면 서버 데이터 정렬이 사용됩니다.

제한 사항

  • Windows 유니코드 전용 데이터 정렬은 COLLATE 절에서 열 수준 및 식 수준 데이터의 nchar, nvarchar, ntext 데이터 형식에 데이터 정렬을 적용하기 위해서만 사용할 수 있고 COLLATE 절에서 데이터베이스 또는 서버 인스턴스의 데이터 정렬을 변경하기 위해 사용할 수는 없습니다.

  • 지정된 데이터 정렬 또는 참조된 개체가 사용하는 데이터 정렬에서 Windows가 지원하지 않는 코드 페이지를 사용하는 경우에는 데이터베이스 엔진에서 오류가 나타납니다.

  • Azure SQL Managed Instance의 서버 수준 데이터 정렬은 인스턴스가 생성될 때 지정될 수 있고 나중에 변경될 수 없습니다. 서버 데이터 정렬 설정 또는 변경에 대해 자세히 알아봅니다.

중요

Azure SQL Database에서 ALTER DATABASE COLLATE 문은 지원되지 않습니다. CREATE DATABASE 시 데이터베이스 데이터 정렬 및 카탈로그 데이터 정렬을 지정합니다.

권장 사항

지원되는 데이터 정렬 이름은 Windows 데이터 정렬 이름(Transact-SQL)SQL Server 데이터 정렬 이름(Transact-SQL)에서 확인할 수 있거나 sys.fn_helpcollations(Transact-SQL) 시스템 함수를 사용할 수 있습니다.

데이터베이스 데이터 정렬을 변경하면 다음 사항이 변경됩니다.

  • 시스템 테이블의 char, varchar, text, nchar, nvarchar또는 ntext 열이 새 데이터 정렬로 변경됩니다.

  • 저장 프로시저 및 사용자 정의 함수에 대한 모든 기존 char, varchar, text, nchar, nvarchar또는 ntext 매개 변수와 스칼라 반환 값이 새 데이터 정렬로 변경됩니다.

  • char, varchar, text, nchar, nvarchar또는 ntext 시스템 데이터 형식 및 이러한 시스템 데이터 형식을 기반으로 하는 모든 사용자 정의 데이터 형식이 새 기본 데이터 정렬로 변경됩니다.

사용자 데이터베이스에서 새로 만든 새 개체의 데이터 정렬은 ALTER DATABASE 문의 COLLATE 절을 사용하여 변경할 수 있습니다. 이 문은 기존 사용자 정의 테이블에 있는 열의 데이터 정렬은 변경하지 않습니다. 이러한 열은 ALTER TABLECOLLATE 절을 사용하여 변경할 수 있습니다.

중요

데이터베이스의 데이터 정렬 또는 개별 열을 변경해도 기존 테이블에 이미 저장된 기본 데이터는 수정되지 않습니다. 애플리케이션에서 서로 다른 데이터 정렬 간의 데이터 변환과 비교를 명시적으로 처리하지 않는 한, 데이터베이스의 기존 데이터를 새 데이터 정렬로 전환하는 것이 좋습니다. 이렇게 하면 애플리케이션이 데이터를 잘못 수정하여 잘못된 결과 또는 자동 데이터 손실이 발생할 수 있는 위험이 해소됩니다.

데이터베이스 데이터 정렬이 변경되면 기본적으로 새 테이블만 새 데이터베이스 데이터 정렬을 상속합니다. 기존 데이터를 새 데이터 정렬로 변환하기 위한 몇 가지 대안이 있습니다.

  • 현재 위치에서 데이터를 변환합니다. 기존 테이블에서 열에 대한 데이터 정렬을 변환하려면 열 데이터 정렬 설정 또는 변경을 참조하세요. 이 작업은 구현하기는 쉽지만, 큰 테이블 및 사용 중인 애플리케이션의 차단 문제로 이어질 수 있습니다. MyString 열을 새 데이터 정렬로 현재 위치에서 변환하려면 다음 예제를 참조하세요.

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • 새 데이터 정렬을 사용하는 새 테이블에 데이터를 복사하고 동일한 데이터베이스에서 원래 테이블을 바꿉니다. 현재 데이터베이스에 데이터베이스 데이터 정렬을 상속하는 새 테이블을 만들고, 이전 테이블과 새 테이블 간에 데이터를 복사하고, 원래 테이블을 삭제하고, 새 테이블의 이름을 원래 테이블의 이름으로 바꿉니다. 이는 현재 위치에서 변환보다 더 빠른 작업이지만 외래 키 제약 조건, 기본 키 제약 조건 및 트리거와 같은 종속성이 있는 복잡한 스키마를 처리할 때 문제가 될 수 있습니다. 또한 애플리케이션에서 데이터를 계속 변경하는 경우 최종 컷오프 전에 원래 테이블과 새 테이블 간에 최종 데이터 동기화가 필요합니다. “복사하여 바꾸기” 변환으로 MyString 열을 새 데이터 정렬로 변환하는 방법은 다음 예를 참조하세요.

    CREATE TABLE dbo.MyTable2 (MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8); 
    
    INSERT INTO dbo.MyTable2 
    SELECT * FROM dbo.MyTable; 
    
    DROP TABLE dbo.MyTable; 
    
    EXEC sp_rename 'dbo.MyTable2', 'dbo.MyTable';
    
  • 새 데이터 정렬을 사용하는 새 데이터베이스에 데이터를 복사하고 원래 데이터베이스를 바꿉니다. 새 데이터 정렬을 사용하여 새 데이터베이스를 만들고, Integration Services 또는 SQL Server Management Studio의 가져오기/내보내기 마법사와 같은 도구를 통해 원래 데이터베이스에서 데이터를 전송합니다. 이는 복잡한 스키마에 대한 간단한 접근 방법입니다. 또한 애플리케이션에서 데이터를 계속 변경하는 경우 최종 컷오프 전에 원래 데이터베이스와 새 데이터베이스 간에 최종 데이터 동기화가 필요합니다.

사용 권한

새 데이터베이스를 만들려면 master 데이터베이스에서 CREATE DATABASE 권한이 필요하거나 CREATE ANY DATABASE 또는 ALTER ANY DATABASE 권한이 필요합니다.

기존 데이터베이스의 데이터 정렬을 변경하려면 데이터베이스에 대한 ALTER 권한이 필요합니다.

SSMS를 사용한 데이터베이스 데이터 정렬 설정 및 변경

  1. 개체 탐색기에서 SQL Server 데이터베이스 엔진의 인스턴스에 연결하고 해당 인스턴스를 확장한 다음 데이터베이스를 확장합니다.

  2. 새 데이터베이스를 만들려는 경우 데이터베이스 를 마우스 오른쪽 단추로 클릭한 다음 새 데이터베이스를 선택합니다. 기본 데이터 정렬을 원하지 않는 경우 옵션 페이지를 선택하고 데이터 정렬 드롭다운 목록에서 데이터 정렬을 선택합니다.

    또는 데이터베이스가 이미 있는 경우 원하는 데이터베이스를 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 옵션 페이지를 선택하고 데이터 정렬 드롭다운 목록에서 데이터 정렬을 선택합니다.

  3. 작업을 마쳤으면 확인을 선택합니다.

Transact-SQL을 사용하여 데이터베이스 데이터 정렬 설정

  1. 데이터베이스 엔진에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 CREATE DATABASE에서 COLLATE 절을 사용하여 데이터 정렬 이름을 지정하는 방법을 보여 줍니다. 이 예에서는 MyOptionsTest 데이터 정렬을 사용하는 Latin1_General_100_CS_AS_SC 데이터베이스를 만듭니다. 데이터베이스를 만든 후 SELECT 문을 실행하여 설정을 확인합니다.

USE master;  
GO

IF DB_ID (N'MyOptionsTest') IS NOT NULL  
    DROP DATABASE MyOptionsTest;  
GO

CREATE DATABASE MyOptionsTest  
    COLLATE Latin1_General_100_CS_AS_SC;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

Transact-SQL을 사용하여 데이터베이스 데이터 정렬 변경

  1. 데이터베이스 엔진에 연결합니다.

  2. 표준 도구 모음에서 새 쿼리를 선택합니다.

  3. 다음 예제를 복사하여 쿼리 창에 붙여넣고 실행을 선택합니다. 이 예제에서는 ALTER DATABASE 문에 COLLATE 절을 사용하여 데이터 정렬 이름을 변경하는 방법을 보여 줍니다. SELECT 문을 실행하여 변경 내용을 확인합니다.

USE master;  
GO

ALTER DATABASE MyOptionsTest  
    COLLATE French_CI_AS ;  
GO  
  
SELECT name, collation_name  
FROM sys.databases  
WHERE name = N'MyOptionsTest';  
GO  

다음 단계

데이터 정렬에 대해 자세히 알아봅니다.