열 데이터 정렬 설정 또는 변경Set or Change the Column Collation

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse 특정 테이블의 열에 대해 다른 데이터 정렬을 지정하고 다음 중 하나를 사용하여 char, varchar, text, nchar, nvarcharntext 데이터의 데이터베이스 데이터 정렬을 재정의할 수 있습니다. You can override the database collation for char, varchar, text, nchar, nvarchar, and ntext data by specifying a different collation for a specific column of a table and using one of the following:

  • CREATE TABLEALTER TABLE의 COLLATE 절The COLLATE clause of CREATE TABLE and ALTER TABLE. 예를 들어For example:

    CREATE TABLE dbo.MyTable  
      (PrimaryKey   int PRIMARY KEY,  
       CharCol      varchar(10) COLLATE French_CI_AS NOT NULL  
      );  
    GO  
    ALTER TABLE dbo.MyTable ALTER COLUMN CharCol  
                varchar(10)COLLATE Latin1_General_CI_AS NOT NULL;  
    GO  
    
  • SQL Server Management StudioSQL Server Management Studio의 COLLATE 절. 자세한 내용은 Collation and Unicode Support을 참조하십시오.For more information, Collation and Unicode Support.

  • SMO( Management Objects)의 Column.Collation SQL ServerSQL Server 속성 사용Using the Column.Collation property in SQL ServerSQL Server Management Objects (SMO).

    다음 중 하나가 현재 참조하고 있는 열의 데이터 정렬은 변경할 수 없습니다.You cannot change the collation of a column that is currently referenced by any one of the following:

  • 계산 열A computed column

  • 인덱스An index

  • 자동으로 또는 CREATE STATISTICS 문에 의해 생성된 배포 통계Distribution statistics, either generated automatically or by the CREATE STATISTICS statement

  • CHECK 제약 조건A CHECK constraint

  • FOREIGN KEY 제약 조건A FOREIGN KEY constraint

    tempdb를 사용할 때 COLLATE 절은 database_default 옵션을 포함하여 임시 테이블에 있는 열이 tempdb의 데이터 정렬 대신 현재 사용자 데이터베이스의 데이터 정렬 기본값을 연결에 사용하도록 지정합니다.When you work with tempdb, the COLLATE clause includes a database_default option to specify that a column in a temporary table uses the collation default of the current user database for the connection instead of the collation of tempdb.

데이터 정렬 및 텍스트 열Collations and text Columns

text 열에는 데이터 정렬이 데이터베이스 기본 데이터 정렬의 코드 페이지와 다른 값을 삽입하거나 업데이트할 수 있습니다.You can insert or update values in a text column whose collation is different from the code page of the default collation of the database. SQL ServerSQL Server 에서는 값을 열의 데이터 정렬로 암시적으로 변환합니다. implicitly converts the values to the collation of the column.

데이터 정렬 및 tempdbCollations and tempdb

tempdb 데이터베이스는 SQL ServerSQL Server 가 시작될 때마다 작성되며 model 데이터베이스와 같은 기본 데이터 정렬을 사용합니다.The tempdb database is built every time SQL ServerSQL Server is started and has the same default collation as the model database. 이는 일반적으로 인스턴스의 기본 데이터 정렬과 같습니다.This is typically the same as the default collation of the instance. 사용자 데이터베이스를 만들고 model과 다른 기본 데이터 정렬을 지정하면 사용자 데이터베이스는 tempdb와 다른 기본 데이터 정렬을 사용합니다.If you create a user database and specify a different default collation than model, the user database has a different default collation than tempdb. 모든 임시 저장 프로시저나 임시 테이블은 tempdb에서 생성되고 저장됩니다.All temporary stored procedures or temporary tables are created and stored in tempdb. 즉, 임시 테이블의 모든 암시적 열과 임시 저장 프로시저의 모든 강제 기본 상수, 변수 및 매개 변수는 영구 테이블 및 저장 프로시저에서 만들어진 유사 개체와는 다른 데이터 정렬을 사용합니다.This means that all implicit columns in temporary tables and all coercible-default constants, variables, and parameters in temporary stored procedures have collations that are different from comparable objects created in permanent tables and stored procedures.

이로 인해 사용자 정의 데이터베이스와 시스템 데이터베이스 개체 간에 데이터 정렬 불일치 문제가 발생할 수 있습니다.This could lead to problems with a mismatch in collations between user-defined databases and system database objects. 예를 들어 SQL ServerSQL Server 인스턴스에서는 Latin1_General_CS_AS 데이터 정렬을 사용하는데 다음 문을 실행합니다.For example, an instance of SQL ServerSQL Server uses the Latin1_General_CS_AS collation and you execute the following statements:

CREATE DATABASE TestDB COLLATE Estonian_CS_AS;  
USE TestDB;  
CREATE TABLE TestPermTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  

이 시스템에서 tempdb 데이터베이스는 코드 페이지 1252를 포함하는 Latin1_General_CS_AS 데이터 정렬을 사용하고 TestDBTestPermTab.Col1 은 코드 페이지 1257을 포함하는 Estonian_CS_AS 데이터 정렬을 사용합니다.In this system, the tempdb database uses the Latin1_General_CS_AS collation with code page 1252, and TestDB and TestPermTab.Col1 use the Estonian_CS_AS collation with code page 1257. 예를 들어For example:

USE TestDB;  
GO  
-- Create a temporary table with the same column declarations  
-- as TestPermTab  
CREATE TABLE #TestTempTab (PrimaryKey int PRIMARY KEY, Col1 nchar );  
INSERT INTO #TestTempTab  
         SELECT * FROM TestPermTab;  
GO  

이전 예에서 tempdb 데이터베이스는 Latin1_General_CS_AS 데이터 정렬을 사용하고 TestDBTestTab.Col1Estonian_CS_AS 데이터 정렬을 사용합니다.With the previous example, the tempdb database uses the Latin1_General_CS_AS collation, and TestDB and TestTab.Col1 use the Estonian_CS_AS collation. 예를 들어For example:

SELECT * FROM TestPermTab AS a INNER JOIN #TestTempTab on a.Col1 = #TestTempTab.Col1;  

tempdb 는 기본 서버 데이터 정렬을 사용하고 TestPermTab.Col1 은 다른 데이터 정렬을 사용하므로 SQL Server는 "같음 작업에서 'Latin1_General_CI_AS_KS_WS'과(와) 'Estonian_CS_AS' 간의 데이터 정렬 충돌을 해결할 수 없습니다"라는 오류를 반환합니다.Because tempdb uses the default server collation and TestPermTab.Col1 uses a different collation, SQL Server returns this error: "Cannot resolve collation conflict between 'Latin1_General_CI_AS_KS_WS' and 'Estonian_CS_AS' in equal to operation."

이 오류를 방지하는 데 사용할 수 있는 방법은 다음과 같습니다.To prevent the error, you can use one of the following alternatives:

  • 임시 테이블 열이 tempdb가 아닌 사용자 데이터베이스의 기본 데이터 정렬을 사용하도록 지정합니다.Specify that the temporary table column use the default collation of the user database, not tempdb. 이렇게 하면 시스템에서 요구할 경우 임시 테이블은 여러 데이터베이스에 있는 유사한 형식의 테이블로 작업할 수 있습니다.This enables the temporary table to work with similarly formatted tables in multiple databases, if that is required of your system.

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE database_default  
       );  
    
  • #TestTempTab 열에 대해 올바른 데이터 정렬을 지정합니다.Specify the correct collation for the #TestTempTab column:

    CREATE TABLE #TestTempTab  
       (PrimaryKey int PRIMARY KEY,  
        Col1 nchar COLLATE Estonian_CS_AS  
       );  
    

참고 항목See Also

서버 데이터 정렬 설정 또는 변경 Set or Change the Server Collation
데이터베이스 데이터 정렬 설정 또는 변경 Set or Change the Database Collation
Collation and Unicode SupportCollation and Unicode Support