SQL Server : A quoi sert le N devant une chaîne de caractère ?
Question courante, pourquoi Management Studio s'obstine à mettre un N devant les chaînes de caractère quand on lui demande de générer un script ?
Pour le comprendre, essayez le script suivant :
IF OBJECT_ID('Test_Collate', 'U') IS NOT NULL
DROP TABLE Test_Collate
GO
CREATE TABLE Test_Collate
(
Id int,
ch1 varchar(50) COLLATE Latin1_General_CI_AS, -- On s'attend à des caractères latins
ch2 varchar(50) COLLATE Greek_CI_AS, -- Ici à du grec
ch3 varchar(50) COLLATE Cyrillic_General_CI_AS -- Et ici du russe par exemple
)
GO
-- Sans le N
INSERT Test_Collate
VALUES(1, 'Français', 'ΔΖΗΘΛπςσφ', 'ЪЫЬЮЯав')
GO
-- Avec le N
INSERT Test_Collate
VALUES(2, N'Français', N'ΔΖΗΘΛπςσφ', N'ЪЫЬЮЯав')
GO
SELECT * FROM Test_Collate
GO
Le résultat du dernier SELECT est ici :
|
1 |
Français |
???T?p?sf |
??????? |
|
2 |
Français |
ΔΖΗΘΛπςσφ |
ЪЫЬЮЯав |
Que faut-il en conclure ? Et bien que le moteur de base de données traite la chaîne comme étant non Unicode sans le N, et comme étant Unicode avec le N.
On voit aussi un autre comportement intéressant du moteur. Ce dernier lorsque vous insérez des caractères dans une page de code données, il remplace tous les caractères inconnus de cette page de code par « ? ». Ce n'est pas à l'affichage, c'est bien le caractère « ? » qui est stockée dans le champ.
Bon Unicode…
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 :