différence entre les constantes hexadécimales et les constantes décimales dans le server SQL

En guise de suivi sur l' insertion de caractères de contrôle dans nvarchar ou varchar à partir du script SQL? :

Quelle est la différence entre les constantes hexadécimales préfixées 0x et les constantes décimales dans le script SQL ci-dessous?

Il semble que les 0x préfixés ne fournissent pas d'entiers. Je suis probablement dans un autre moment ce soir, alors s'il vous plaît éclairer moi (:

select char(0x64) charx64, char(0100) char100, nchar(0x64) ncharx64, nchar(0100) nchar100, char(0x6564) charx6564, char(025956) char25956, nchar(0x6564) ncharx6564, nchar(025956) nchar25956, 0x64 x64, 0100 d100, 0x6564 x6564, 025956 d25956, cast(0x64 as varchar) x64varchar, cast(0100 as varchar) d100varchar, cast(0x6564 as varchar) x6564varchar, cast(025956 as varchar) d25956varchar, cast(0x64 as nvarchar) x64nvarchar, cast(0100 as nvarchar) d100nvarchar, cast(0x6564 as nvarchar) x6564nvarchar, cast(025956 as nvarchar) d25956nvarchar, null ; 

(le null est là donc il était plus facile de générer cette déclaration)

Résultat:

 C:\bin>"C:\Program Files\Microsoft SQL Server\110\Tools\Binn\SQLCMD.EXE" -S .\SQLEXPRESS -E -i hex-versus-decimal.sql charx64 char100 ncharx64 nchar100 charx6564 char25956 ncharx6564 nchar25956 x64 d100 x6564 d25956 x64varchar d100varchar x6564varchar d25956varchar x64nvarchar d100nvarchar x6564nvarchar d25956nvarchar ------- ------- -------- -------- --------- --------- ---------- ---------- ---- ----------- ------ ----------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------- dddd NULL NULL ? ? 0x64 100 0x6564 25956 d 100 ed 25956 d 100 ? 25956 NULL (1 rows affected) 

Pour le server MS SQL, les constantes 0x sont des littéraux binarys , pas des entiers (plus sur les types binarys et varbinarys ). Quand vous appelez char() et nvarchar() sur eux, ils sont convertis en entiers (comme s'ils étaient des représentations entières big-endian, si je me souviens bien). Lorsque vous les transtypez dans varchar / nvarchar, ils sont interprétés comme des octets de text codé ANSI ou UCS2.