Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SQL Server : Contrainte et Index unique dépendent du classement (collation)

Question d'un de mes stagiaires de la semaine passée, est ce que l'unicité des contraintes et des index unique dépend du classement (collation). Ma réponse a priori était oui, étant donné que le tri d'un index dépend de ce paramètre.

Petit rappel sur les contraintes et index unique… Les deux en fait utilisent un index unique, du coup pas de différence de comportement entre les 2 (sauf la syntaxe et le fait qu'une contrainte est listé comme telle en plus de créer un index). Notez que les clefs primaires utilisent le même système pour s'assurer de l'unicité des données.

Testons le comportement avec différents classements sur un même type de table :

CREATE TABLE Table_CI_AI

    Nom varchar(50) COLLATE French_CI_AI UNIQUE
)

INSERT
INTO Table_CI_AI
VALUES('azerty')

INSERT INTO Table_CI_AI
VALUES('AZERTY')

INSERT INTO Table_CI_AI
VALUES('azérty')

Ce qui nous donne de la part de SQL Server les messages suivant :

(1 row(s) affected)
Msg 2627, Level 14, State 1, Line 3
Violation of UNIQUE KEY constraint 'UQ__Table_CI_AI__014935CB'. Cannot insert duplicate key in object 'dbo.Table_CI_AI'.
The statement has been terminated.
Msg 2627, Level 14, State 1, Line 5
Violation of UNIQUE KEY constraint 'UQ__Table_CI_AI__014935CB'. Cannot insert duplicate key in object 'dbo.Table_CI_AI'.
The statement has been terminated.

Prenons notre 2ème table avec les mêmes insertions :

CREATE TABLE Table_CS_AS

    Nom varchar(50) COLLATE French_CS_AS UNIQUE
)

INSERT INTO Table_CS_AS
VALUES('azerty')

INSERT INTO Table_CS_AS
VALUES('AZERTY')

INSERT INTO Table_CS_AS
VALUES('azérty')

Résultat :

(1 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)

Au final quand notre classement (collation) est non sensible à un élément, les caractères se retrouvent égaux pour notre index, la valeur en double est donc rejetée. Dans notre premier exemple les chaînes suivantes sont identiques pour le moteur : 'azerty' = 'AZERTY' = 'azérty'.

Donc l'unicité dépend bien du classement (collation) utilisé par un champ.

Bons tests…

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Publié dimanche 16 septembre 2007 11:29 par christian
Classé sous : ,

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Merci par Blog de Jérémy Jeanson le 10-01-2019, 20:47

- Office 365: Script PowerShell pour auditer l’usage des Office Groups de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 11:02

- Office 365: Script PowerShell pour auditer l’usage de Microsoft Teams de votre tenant par Blog Technique de Romelard Fabrice le 04-26-2019, 10:39

- Office 365: Script PowerShell pour auditer l’usage de OneDrive for Business de votre tenant par Blog Technique de Romelard Fabrice le 04-25-2019, 15:13

- Office 365: Script PowerShell pour auditer l’usage de SharePoint Online de votre tenant par Blog Technique de Romelard Fabrice le 02-27-2019, 13:39

- Office 365: Script PowerShell pour auditer l’usage d’Exchange Online de votre tenant par Blog Technique de Romelard Fabrice le 02-25-2019, 15:07

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Stream Portal par Blog Technique de Romelard Fabrice le 02-21-2019, 17:56

- Office 365: Script PowerShell pour auditer le contenu de son Office 365 Video Portal par Blog Technique de Romelard Fabrice le 02-18-2019, 18:56

- Office 365: Script PowerShell pour extraire les Audit Log basés sur des filtres fournis par Blog Technique de Romelard Fabrice le 01-28-2019, 16:13

- SharePoint Online: Script PowerShell pour désactiver l’Option IRM des sites SPO non autorisés par Blog Technique de Romelard Fabrice le 12-14-2018, 13:01