Comment VARCHAR / CHAR parvient à stocker / rendre symboles multinationales dans SQL Server?
-
08-10-2019 - |
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
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 .