Question

nous avons utilisé pour lire que varchar (char) est utilisé pour stocker des caractères ASCII avec une bute par caractère alors que nvarchar (varchar) utilise UNICODE avec 2 octets.
Mais qui ASCII? Dans SSMS 2008 R2

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

Mise à jour: Ooops, le résultat était vraiment ??? mais pas ??ç. Merci, Martin

Était-ce utile?

La solution

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

retour

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

Vous pouvez voir que dépendant de la collecte des caractères non ASCII peut se perdre ou converti en silence équivalents près.

Autres conseils

de ASCII avec une page de code qui définit les 128 caractères supérieurs (128-255). Ceci est contrôlé par la « collation » dans SQL Server, et en fonction de la collation que vous utilisez, vous pouvez utiliser un sous-ensemble de caractères « spéciaux ».

Voir cette page MSDN .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top