J'ai une table avec une clé unique qui comprend une NVARCHAR(50)
colonne (correcte ou non, mais est là). Ainsi, lorsque vous essayez d'insérer Șc
ou C
(peu importe l'ordre de l'insert), il se casse sur le 2ème insert en raison de problèmes de classement. Voici l'erreur:
(1 ligne (s) affectée (s)) Msg 2601, niveau 14, état 1, ligne 16 Impossible d'insérer une ligne de clé en double dans l'objet 'dbo.testT' avec l'index unique 'IX_TestT'. La valeur de clé en double est (C).
Sélectionnez les retours:
Le classement par défaut de la base de données est Latin1_General_CI_AS
. J'ai passé du temps à chercher comment le résoudre, sans trop modifier la structure déjà existante, mais je ne trouve pas de moyen de travailler. J'ai essayé différentes collations et combinaisons, tout échoue. Lisez ( ici et ici ) sur les extensions de personnages et ainsi de suite, toujours coincé. Voici un exemple de code que j'utilise pour répliquer le problème, n'hésitez pas à modifier et à recommander tout ce qui pourrait aider à résoudre ce problème.
CREATE TABLE testT (
[Default_Collation] [NVARCHAR] (50) COLLATE DATABASE_DEFAULT,
[Latin1_General_CI_AS] [NVARCHAR] (50) COLLATE Latin1_General_CI_AS,
[Latin1_General_CI_AI] [NVARCHAR] (50) COLLATE Latin1_General_CI_AI,
[SQL_Collation] [NVARCHAR] (50) COLLATE SQL_Latin1_General_CP1_CI_AS);
CREATE UNIQUE CLUSTERED INDEX [IX_TestT] ON [dbo].[testT] ([Default_Collation])
ON [PRIMARY]
GO
INSERT INTO testT
SELECT N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc', --COLLATE Latin1_General_CI_AS
N'Șc' --COLLATE Latin1_General_CI_AS
INSERT INTO testT
SELECT N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE Latin1_General_CI_AS
,N'C' --COLLATE SQL_Latin1_General_CP1_CI_AS
SELECT * FROM testT;
DROP TABLE testT;