Database
 sql >> Base de données >  >> RDS >> Database

Comprendre le classement au niveau de la base de données et l'impact de sa modification pour une base de données

Lorsque vous développez une application ou écrivez un code dans le système de base de données SQL, il est crucial de comprendre comment les données seront triées et comparées. Vous pouvez stocker vos données dans une langue spécifique ou vous pouvez souhaiter que SQL Server traite séparément les données sensibles à la casse et celles qui ne le sont pas. Microsoft a fourni un paramètre SQL Server appelé Collation pour contrôler et répondre à ces exigences.

Qu'est-ce que le classement dans SQL Server ?

Nous pouvons définir le classement à différents niveaux dans SQL Server, comme indiqué ci-dessous.

  • Niveau du serveur
  • Niveau de la base de données
  • Niveau de colonne
  • Niveau d'expression

Le classement au niveau du serveur peut parfois être appelé classement au niveau de l'instance SQL Server .

Le classement au niveau de la base de données sera hérité du paramètre de classement au niveau du serveur si vous ne choisissez aucun classement spécifique lors de la création de la base de données. Vous pouvez également modifier ultérieurement le classement au niveau de la base de données. Notez que la modification du classement de la base de données ne sera appliquée qu'aux objets à venir ou nouveaux qui seront créés après le changement de classement.

Le nouveau classement ne modifiera pas les données existantes stockées dans les tables qui ont été triées avec le dernier type de classement. L'équipe d'application a besoin d'une planification plus poussée pour gérer cette conversion de données stockées en raison du nouveau paramètre de classement.

Il y a plusieurs façons de le faire. La première consiste à copier les données de la table existante dans une nouvelle table créée avec le nouveau classement, puis à remplacer l'ancienne table par la nouvelle. Vous pouvez également déplacer vos données de table vers une nouvelle base de données en ayant un nouveau classement et remplacer l'ancienne base de données par la nouvelle.

REMARQUE  :La modification du classement est une tâche complexe et vous devez l'éviter, sauf si vous avez une analyse de rentabilisation obligatoire.

Comment rechercher et modifier le classement de la base de données dans SQL Server ?

Continuons et vérifions le classement de l'instance SQL Server et de toutes les bases de données hébergées sur cette instance. Vous pouvez vérifier le classement en accédant aux propriétés au niveau de la base de données ou de l'instance. fenêtre à l'aide de SQL Server Management Studio ou en exécutant simplement l'instruction T-SQL ci-dessous. Le classement de chaque base de données est stocké dans l'objet système sys.databases – nous y accéderons pour obtenir ces informations.

--Check Database Collation
SELECT name, collation_name  
FROM sys.databases  
GO  
--Check Server or Instance level Collation
SELECT SERVERPROPERTY('Collation') As [Instance Level Collation]

J'ai exécuté l'instruction T-SQL ci-dessus et j'ai obtenu la sortie ci-dessous. Nous pouvons voir que toutes les bases de données et le classement au niveau du serveur ont les mêmes paramètres que SQL_Latin1_General_CP1_CI_AS . Cela signifie que les classements de base de données ont été hérités par le classement au niveau du serveur lors de leur création et que la valeur par défaut n'a pas été modifiée.

Maintenant, laissez-moi vous montrer comment vérifier le classement de la base de données à l'aide de l'interface graphique dans SQL Server Management Studio.

Tout d'abord, connectez-vous à votre instance SQL Server à l'aide de SQL Server Management Studio. Développez le nœud de l'instance suivi des Bases de données dossier. Faites un clic droit sur la base de données cible et choisissez Propriétés :

Vous obtiendrez les propriétés de la base de données ci-dessous fenêtre.

Cliquez maintenant sur Options onglet du panneau de gauche. Vous obtiendrez plusieurs paramètres de propriétés dans le panneau de droite. Collation est la première propriété de cette page - vous pouvez voir qu'elle est la même que dans le script T-SQL ci-dessus.

De même, vous pouvez cliquer sur le nœud de l'instance SQL Server et cliquer avec le bouton droit sur les propriétés au niveau de l'instance. pour voir le classement au niveau du serveur.

Si vous souhaitez changer ce classement en un nouveau classement, il vous suffit de cliquer sur le Collation déroulant et choisissez l'option dont vous avez besoin. Assurez-vous d'avoir effectué une sauvegarde complète de votre base de données avant de le faire.

J'ai choisi un classement similaire avec SQL_Latin1_General_CP1_CS sensible à la casse _AS pour cette base de données et cliqué sur OK pour l'appliquer. Remarque :Assurez-vous que personne n'est connecté à la base de données cible pendant cette procédure, sinon vous devrez basculer le mode en mono-utilisateur et modifiez cette configuration.

Vous pouvez également modifier ce classement de base de données à l'aide de l'instruction T-SQL. Pour cela, utilisez le COLLER clause de l'instruction ALTER DATABASE.

Tout d'abord, nous avons basculé la base de données en mode mono-utilisateur mode, puis a changé le classement et, enfin, a déplacé la base de données vers le mode multi-utilisateur mode.

--Change Database Collation using T-SQL  
USE master;  
GO  
Alter DATABASE [AdventureWorks2019] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [AdventureWorks2019]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [AdventureWorks2019] SET MULTI_USER

Répertorier tous les classements pris en charge dans SQL Server

Cette section vous montrera comment trouver tous les classements disponibles dans SQL Server. Tout d'abord, laissez-moi vous montrer comment obtenir la liste de tous les classements pris en charge pour l'instance SQL Server.

SQL Server a une fonction système appelée fn_helpcollations() que vous pouvez utiliser pour récupérer tous les classements.

Exécutez la commande ci-dessous pour afficher la liste.

--Display the list of all collations  
SELECT name, description FROM fn_helpcollations()

Nous pouvons voir tous les 5508 classements pris en charge dans la section de sortie. Si vous n'êtes pas sûr du classement à choisir, vous pouvez utiliser la clause WHERE dans le script ci-dessous pour filtrer tous les classements possibles pouvant être définis sur la base de données.

Supposons que vous ayez besoin de stocker vos données en anglais américain et que vous souhaitiez que SQL Server les gère dans un format sensible à la casse. Vous pouvez utiliser la commande ci-dessous pour récupérer la liste des classements possibles et pris en charge pour votre requête :

--Display the list of all collations with WHERE clause 
SELECT Name, Description FROM fn_helpcollations()  
WHERE Name like 'SQL_Latin1%' AND Description LIKE '%case-sensitive%’

La sortie affiche seulement 10 classements répondant à votre requête. Vous pouvez utiliser le script ci-dessus pour filtrer divers classements.

Impact de la modification du classement de la base de données sur la sortie de la requête

Dans cette section, je vais vous montrer la différence entre les deux sorties d'une même requête lorsqu'elles sont exécutées avec des classements différents.

Tout d'abord, je vais créer une base de données nommée MSSQL avec un classement (SQL_Latin1_General_CP1_CS _AS ). Ensuite, je vais exécuter la même requête deux fois pour obtenir la sortie. Plus tard, je changerai le classement en SQL_Latin1_General_CP1_CI _AS et exécutez à nouveau les mêmes requêtes pour obtenir leur sortie. Vous pouvez comparer les deux sorties et comprendre l'impact de la modification d'un classement de base de données. Alors, commençons par la création de la base de données.

Lancez la nouvelle fenêtre de création de base de données comme indiqué dans l'image ci-dessous. Vous pouvez également créer cette base de données à l'aide de T-SQL. Après cela, vous pouvez voir le nom de la base de données et ses fichiers de données. Maintenant, cliquez sur le deuxième onglet du panneau de gauche pour passer à la fenêtre des propriétés de classement.

Vous pouvez voir que le nom de collation pour cette base de données est le par défaut . Cela signifie que cette base de données héritera du classement du type de classement au niveau du serveur. Cliquez sur Collation menu déroulant pour choisir votre nouveau classement.

J'ai sélectionné le classement ci-dessous SQL_Latin1_General_CP1_CS _AS pour cette base de données - pas celle par défaut. Cliquez sur OK pour procéder à la création de la base de données.

Maintenant, vérifiez le classement de la base de données pour une base de données nouvellement créée. Nous pouvons voir qu'il s'agit de SQL_Latin1_General_CP1_CS _AS comme nous l'avons sélectionné à l'étape précédente.

En SQL_Latin1_General_CP1_CS _AS , CS signifie sensible à la casse et CI signifie insensible à la casse mode. Vous pouvez maintenant exécuter le code T-SQL ci-dessous ou n'importe quel code pour obtenir la sortie.

J'ai exécuté la même commande deux fois. Le premier script filtre les noms de colonne avec une valeur SYS dans la capitale lettres, alors que le deuxième script filtrera la même colonne avec la même valeur sys en petit des lettres. La section de sortie montre que le premier script n'a affiché aucune sortie, alors que le second script a affiché la sortie en raison de son comportement sensible à la casse.

Select * from sysusers
Where name=’SYS’
Go
Select * from sysusers
Where name=’sys’
GO

Maintenant, nous allons changer le classement de cette base de données en classement insensible à la casse SQL_Latin1_General_CP1_CI _AS en exécutant les instructions T-SQL ci-dessous. Vous pouvez également le modifier via l'interface graphique en accédant à la fenêtre Propriétés de la base de données dans SQL Server Management Studio.

--Change database collation to SQL_Latin1_General_CP1_CI_AS
USE master;  
GO  
Alter DATABASE [MSSQL] SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
ALTER DATABASE [MSSQL]  
COLLATE SQL_Latin1_General_CP1_CI_AS;  
GO
Alter DATABASE [MSSQL] SET MULTI_USER

J'ai exécuté le script ci-dessus en une seule fois, et le classement de la base de données a été remplacé avec succès par un nouveau classement prenant en charge la casse.

Vous pouvez vérifier cette modification en exécutant les scripts ci-dessous pour vérifier le classement de la base de données MSSQL nouvellement créée. Nous pouvons voir que le nouveau classement est défini pour cette base de données dans l'image ci-dessous.

Nous exécuterons à nouveau la même instruction T-SQL avant de modifier le classement pour voir l'impact de cette modification. Comme nous pouvons le voir maintenant, les deux instructions T-SQL sont dans la sortie.

Conclusion

J'espère qu'il est évident que le classement dans SQL Server est crucial. Nous avons défini l'impact que cela laisse si vous apportez des modifications au classement à n'importe quel niveau dans SQL Server. Effectuez toujours une planification appropriée et testez d'abord les modifications dans votre environnement à cycle de vie inférieur.

Restez à l'écoute pour mon prochain article, où je vous montrerai une méthode étape par étape pour changer le classement au niveau du serveur.

Veuillez partager cet article et donner votre avis, cela nous aide à nous améliorer.