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 avec SQL Server Management Studio (SSMS) ou Transact-SQL. Si aucun classement n’est spécifié, le classement du serveur est utilisé.
Limitations et restrictions
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.
Recommandations
Vous trouverez les noms des classements pris en charge dans Nom de classement Windows (Transact-SQL) et Nom du classement SQL Server (Transact-SQL). Vous pouvez également utiliser la fonction système sys.fn_helpcollations (Transact-SQL).
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.
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.
autorisations
La création d’une base de données requiert l’autorisation CREATE DATABASE
dans la base de données master
ou bien l’autorisation CREATE ANY DATABASE
ou ALTER ANY DATABASE
.
La modification du classement d’une base de données existante, requiert l’autorisation ALTER
sur la base de données.
Définir ou modifier le classement de la base de données avec SSMS
Dans 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.
Si vous créez une 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.
Sinon, si la base de données existe déjà, cliquez avec le bouton droit sur la base de données de votre choix et sélectionnez Propriétés. Sélectionnez la page Options, puis un classement dans la liste déroulante Classement.
Quand vous avez terminé, sélectionnez OK.
Définir le classement de base de données avec Transact-SQL
Connectez-vous au Moteur de base de données.
Dans la barre d’outils standard, sélectionnez Nouvelle requête.
Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple montre comment utiliser la clause COLLATE dans CREATE DATABASE pour spécifier un nom de classement. L'exemple crée la base de données
MyOptionsTest
qui utilise le classementLatin1_General_100_CS_AS_SC
. Après avoir créé la base de données, exécutez l'instructionSELECT
pour vérifier le paramètre.
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
Modifier le classement de base de données avec Transact-SQL
Connectez-vous au Moteur de base de données.
Dans la barre d’outils standard, sélectionnez Nouvelle requête.
Copiez et collez l’exemple suivant dans la fenêtre de requête, puis sélectionnez Exécuter. Cet exemple montre comment utiliser la clause COLLATE dans une instruction ALTER DATABASE pour changer le nom du classement. Exécutez l'instruction
SELECT
pour vérifier la modification.
USE master;
GO
ALTER DATABASE MyOptionsTest
COLLATE French_CI_AS ;
GO
SELECT name, collation_name
FROM sys.databases
WHERE name = N'MyOptionsTest';
GO
Étapes suivantes
Découvrez plus d’informations sur le classement :
- Prise en charge d'Unicode et du classement
- sys.fn_helpcollations (Transact-SQL)
- sys.databases (Transact-SQL)
- Nom du classement SQL Server (Transact-SQL)
- Nom de classement Windows (Transact-SQL)
- COLLATE (Transact-SQL)
- Priorité de classement (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- CREATE DATABASE (SQL Server Transact-SQL)
- ALTER TABLE (Transact-SQL)
- ALTER DATABASE (Transact-SQL)