Sie sind auf Seite 1von 1

N devant une chane de caractre, MS SQL Server

Question courante, pourquoi Management Studio s'obstine mettre un N devant les chanes
de caractre quand on lui demande de gnrer 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 caractres 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, 'Franais', '', '')
GO

-- Avec le N
INSERT Test_Collate
VALUES(2, N'Franais', N'', N'')
GO

SELECT * FROM Test_Collate


GO

Le rsultat du dernier SELECT est ici :

1 Franais ???T?p?sf ???????


2 Franais

Que faut-il en conclure ? Et bien que le moteur de base de donnes traite la chane comme
tant non Unicode sans le N, et comme tant Unicode avec le N.

On voit aussi un autre comportement intressant du moteur. Ce dernier lorsque vous insrez
des caractres dans une page de code donnes, il remplace tous les caractres inconnus de
cette page de code par ? . Ce n'est pas l'affichage, c'est bien le caractre ? qui est
stocke dans le champ.

Bon Unicode

Das könnte Ihnen auch gefallen