Définir ou changer le classement des colonnesSet or Change the Column Collation

Vous pouvez remplacer le classement de la base de données pour les données char, varchar, text, nchar, nvarcharet ntext en spécifiant un classement différent pour une colonne spécifique d’une table et en utilisant l’un des éléments suivants :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:

  • Clause COLLATE de CREATE TABLE et ALTER TABLE.The COLLATE clause of CREATE TABLE and ALTER TABLE. Par exemple :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.. Pour plus d’informations, consultez Prise en charge d’Unicode et du classement.For more information, Collation and Unicode Support.

  • Utilisation de la propriété Column.Collation dans SQL ServerSQL Server Management Objects (SMO).Using the Column.Collation property in SQL ServerSQL Server Management Objects (SMO).

    Vous ne pouvez pas modifier le classement d'une colonne actuellement référencée par l'un des éléments suivants :You cannot change the collation of a column that is currently referenced by any one of the following:

  • une colonne calculée ;A computed column

  • un index ;An index

  • des statistiques de distribution, générées automatiquement ou à l'aide de l'instruction CREATE STATISTICS ;Distribution statistics, either generated automatically or by the CREATE STATISTICS statement

  • une contrainte CHECK ;A CHECK constraint

  • une contrainte FOREIGN KEY.A FOREIGN KEY constraint

    Quand vous utilisez tempdb, la clause COLLATE contient une option database_default pour spécifier qu’une colonne de table temporaire utilise, pour la connexion, le classement par défaut de la base de données utilisateur active à la place du classement de 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.

Classements et colonnes textCollations and text Columns

Vous pouvez insérer ou mettre à jour les valeurs d’une colonne text dont le classement est différent de la page de codes du classement par défaut de la base de données.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 convertit implicitement les valeurs en fonction du classement de la colonne. implicitly converts the values to the collation of the column.

Classements et tempdbCollations and tempdb

La base de données tempdb est créée à chaque démarrage de SQL ServerSQL Server et a le même classement par défaut que la base de données model .The tempdb database is built every time SQL ServerSQL Server is started and has the same default collation as the model database. Il est en général identique au classement par défaut de l'instance.This is typically the same as the default collation of the instance. Si vous créez une base de données utilisateur et spécifiez un classement par défaut différent de model, la base de données utilisateur a un classement par défaut différent de 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. Toutes les procédures stockées ou tables temporaires sont créées et stockées dans tempdb.All temporary stored procedures or temporary tables are created and stored in tempdb. En d'autres termes, toutes les colonnes implicites des tables temporaires et toutes les constantes, variables et paramètres modifiables par défaut des procédures stockées temporaires ont d'autres classements que les objets comparables créés dans les tables et procédures stockées permanentes.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.

Ceci pourrait provoquer des problèmes de non-correspondance de classement entre les bases de données définies par l'utilisateur et les objets de base de données système.This could lead to problems with a mismatch in collations between user-defined databases and system database objects. Par exemple, une instance de SQL ServerSQL Server utilise le classement Latin1_General_CS_AS et vous exécutez les instructions suivantes :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 );  

Dans ce système, la base de données tempdb utilise le classement Latin1_General_CS_AS avec la page de codes 1252, et TestDB et TestPermTab.Col1 utilisent le classement Estonian_CS_AS avec la page de codes 1257.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. Par exemple :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  

Dans l’exemple précédent, la base de données tempdb utilise le classement Latin1_General_CS_AS, et TestDB et TestTab.Col1 utilisent le classement Estonian_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. Par exemple :For example:

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

Comme tempdb utilise le classement par défaut du serveur et que TestPermTab.Col1 utilise un autre classement, SQL Server affiche l’erreur suivante : impossible de résoudre le conflit de classement entre « Latin1_General_100_CI_AS_KS_WS » et « Chinese_Simplified_Pinyin_100_CI_AS » dans l’opération égal à.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."

Pour éviter l'erreur, vous pouvez utiliser une des solutions suivantes :To prevent the error, you can use one of the following alternatives:

  • Spécifiez que la colonne de table temporaire utilise le classement par défaut de la base de données utilisateur à la place de tempdb.Specify that the temporary table column use the default collation of the user database, not tempdb. Cela permet à la table temporaire de fonctionner avec des tables formatées de la même manière dans différentes bases de données, si votre système l'exige.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  
       );  
    
  • Spécifiez le classement approprié pour la colonne #TestTempTab :Specify the correct collation for the #TestTempTab column:

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

Voir aussiSee Also

Définir ou modifier le classement du serveur Set or Change the Server Collation
Définir ou modifier le classement de la base de données Set or Change the Database Collation
Prise en charge d’Unicode et du classement Collation and Unicode Support