Définir ou modifier le classement de la base de données

S’applique à : SQL Server Azure SQL Managed Instance

Cet article explique comment définir ou modifier le classement de la base de données à l’aide de SQL Server Management Studio (SSMS) ou Transact-SQL.

Si aucun classement de base de données n’est spécifié, le classement du serveur est utilisé.

Recommandations

Vous trouverez les noms des classements pris en charge dans Nom du classement Windows et Nom du classement SQL. Vous pouvez également utiliser la fonction système sys.fn_helpcollations.

Quand vous changez le classement d’une base de données, vous changez :

  • Toutes les colonnes char, varchar, text, nchar, nvarcharou ntext présentes dans les tables système sont modifiées en fonction du nouveau classement.

  • Tous les paramètres char, varchar, text, nchar, nvarcharou ntext existants et les valeurs de retour scalaires destinés aux procédures stockées et aux fonctions définies par l’utilisateur sont modifiés en fonction du nouveau classement.

  • Les types de données système char, varchar, text, nchar, nvarcharou ntext et tous les types de données définis par l’utilisateur sur la base de ces types de données système sont modifiés en fonction du nouveau classement par défaut.

Vous pouvez modifier le classement de tous les objets créés dans une base de données utilisateur à l'aide de la clause COLLATE de l'instruction ALTER DATABASE. Cette instruction ne modifie pas le classement des colonnes dans les tables définies par l'utilisateur existantes. Celles-ci peuvent être modifiées à l'aide de la clause COLLATE de l'instruction ALTER TABLE.

autorisations

Pour créer une base de données, vous devez obtenir l’autorisation CREATE DATABASE dans la base de données master ou bien l’autorisation CREATE ANY DATABASE ou ALTER ANY DATABASE.

Pour modifier le classement d’une base de données existante, vous devez obtenir l’autorisation ALTER sur la base de données.

Définir ou modifier le classement de la base de données

Vous pouvez définir ou modifier le classement de la base de données à l'aide de SQL Server Management Studio (SSMS) ou de Transact-SQL (T-SQL).

Vous pouvez spécifier le classement d’une nouvelle base de données ou mettre à jour le classement d’une base de données existante à l’aide de SQL Server Management Studio (SSMS).

Dans SQL Server Management Studio, ouvrez l’Explorateur d’objets, connectez-vous à une instance du moteur de base de données SQL Server, développez cette instance, puis développez Bases de données :

  • Pour une nouvelle base de données : cliquez avec le bouton droit sur Bases de données, puis sélectionnez Nouvelle base de données. Si vous ne souhaitez pas définir le classement par défaut, sélectionnez la page Options, puis un classement dans la liste déroulante Classement.
  • Pour une base de données existante : cliquez avec le bouton droit sur la base de données souhaitée et sélectionnez Propriétés. Sélectionnez la page Options, puis un classement dans la liste déroulante Classement.

Données après modification du classement

Important

Le changement du classement d’une base de données ou de colonnes individuelles ne modifie pas les données sous-jacentes déjà stockées dans les tables existantes. À moins que votre application ne gère explicitement la comparaison et la conversion des données entre les différents classements, nous vous recommandons de transférer les données existantes de la base de données vers le nouveau classement. Cette opération supprime le risque que les applications modifient incorrectement les données, ce qui peut entraîner des résultats incorrects ou une perte de données silencieuse.

En cas de modification du classement d’une base de données, seules les nouvelles tables héritent par défaut du nouveau classement de la base de données. Il existe plusieurs alternatives pour convertir les données existantes vers le nouveau classement :

  • Convertir les données sur place. Pour convertir le classement d’une colonne dans une table existante, consultez Définir ou changer le classement des colonnes. Cette opération est facile à implémenter, mais peut devenir un problème bloquant pour les grandes tables et les applications occupées. Voici un exemple qui illustre une conversion sur place de la colonne MyString vers un nouveau classement :

    ALTER TABLE dbo.MyTable
        ALTER COLUMN MyString VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8;
    
  • Copier les données dans de nouvelles tables qui utilisent le nouveau classement, puis remplacer les tables d’origine dans la même base de données. Créez, dans la base de données actuelle, une table qui héritera du classement de la base de données, copiez les données entre l’ancienne table et la nouvelle table, supprimez la table d’origine et renommez la nouvelle table d’après le nom de la table d’origine. Il s’agit d’une opération plus rapide qu’une conversion sur place, mais qui peut s’avérer difficile lors de la gestion de schémas complexes comportant des dépendances telles que des contraintes de clé étrangère, des contraintes de clé primaire et des déclencheurs. Elle nécessiterait également une synchronisation finale des données entre la table d’origine et la nouvelle table avant la suppression finale, si les données continuent d’être changées par les applications. Voici un exemple qui illustre une conversion de type « copier et remplacer » de la colonne MyString vers un nouveau classement :

    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';
    
  • Copier les données dans une nouvelle base de données qui utilise le nouveau classement et remplacer la base de données d’origine. Créez une base de données utilisant le nouveau classement, puis transférez les données de la base de données d’origine via des outils comme Services d’intégration ou l’Assistant Importation/exportation dans SQL Server Management Studio. Il s’agit d’une approche plus simple pour les schémas complexes. Elle nécessiterait également une synchronisation finale des données entre la base de données d’origine et la nouvelle avant la suppression finale, si les données continuent d’être changées par les applications.

Limites

  • Les classements Windows Unicode seulement peuvent être utilisés uniquement avec la clause COLLATE pour appliquer des classements aux types de données nchar, nvarchar et ntext sur les données de niveau de colonne et de niveau d’expression. Ils ne peuvent pas être utilisés avec la clause COLLATE pour modifier le classement d’une instance de serveur ou de base de données.

  • Si le classement spécifié ou le classement utilisé par l’objet référencé utilise une page de codes non gérée par Windows, le Moteur de base de données affiche une erreur.

  • Le classement au niveau du serveur dans Azure SQL Managed Instance peut être spécifié quand l’instance est créée et ne peut plus être modifiée. Pour en savoir plus, consultez Définir ou changer le classement du serveur.

Important

L’instruction ALTER DATABASE COLLATE n’est pas prise en charge dans Azure SQL Database. Spécifiez le classement de base de données et le classement du catalogue au moment de CREATE DATABASE.