0

J'ai lu que varchar (char) est utilisé pour stocker des caractères ASCII avec 1 bute par caractère tandis que nvarchar (varchar) utilise UNICODE avec 2 octets.
Mais quel ASCII? Dans SSMS 2008 R2Comment VARCHAR/CHAR parvient-il à stocker/rendre des symboles multinationaux dans SQL Server?

DECLARE @temp VARCHAR(3); --CHAR(3) 
SET @temp = 'ЮЯç'; --cyryllic + portuguese-specific letters 
select @temp,datalength(@temp) 
-- results in 
-- ЮЯç 3 

Mise à jour: Oups, le résultat était vraiment ЮЯс mais pas ЮЯç. Merci, Martin

Répondre

3
declare @table table 
(
c1 char(4) collate Cyrillic_General_CS_AI, 
c2 char(4) collate Latin1_General_100_CS_AS_WS 
) 

INSERT INTO @table VALUES (N'ЮЯçæ', N'ЮЯçæ') 

SELECT c1,cast(c1 as binary(4)) as c1bin, c2, cast(c2 as binary(4)) as c2bin 
FROM @table 

Retours

c1 c1bin  c2 c2bin 
---- ---------- ---- ---------- 
ЮЯc? 0xDEDF633F ??çæ 0x3F3FE7E6 

Vous pouvez voir que dépendant de la collecte des caractères non ASCII peuvent être perdus ou convertis en équivalents silencieusement près.

1

C'est ASCII avec une page de code qui définit les 128 caractères supérieurs (128-255). Ceci est contrôlé par le "classement" dans SQL Server, et selon le classement que vous utilisez, vous pouvez utiliser un sous-ensemble de caractères "spéciaux".

Voir this MSDN page.

+0

+1 merci. Il est omniprésent de lire sur ASCII utilisé par CHAR (VARCHAR) bien qu'ils utilisent vraiment ASCII étendu de Windows. –