2013-12-23 6 views
1

Как следить за insert control characters in nvarchar or varchar from SQL script?:разница между шестнадцатеричными константами и десятичными константами в сервере SQL

В чем разница между 0x приставочных шестнадцатеричных константами и десятичными единицами в поле ниже сценарии SQL?

Похоже, что префикс 0x не предает целые числа. Я, вероятно, в еще ДУХ момент в этот вечер, так что, пожалуйста, просветите меня (:

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 
; 

(null там так было легче генерировать это утверждение)

Результат:

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        
------- ------- -------- -------- --------- --------- ---------- ---------- ---- ----------- ------ ----------- ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ------------------------------ ----------- 
d  d  d  d  NULL  NULL  ?   ?   0x64   100 0x6564  25956 d        100       ed        25956       d        100       ?        25956         NULL 

(1 rows affected) 

ответ

2

Для MS SQL-сервера 0x-константы: binary literals, а не целые числа (больше на binary and varbinary types). Когда вы вызываете на них char() и nvarchar(), они преобразуются в целые числа (как если бы они были big-endian int eger, если я правильно помню). Когда вы передаете их в varchar/nvarchar, они интерпретируются как байты текста с кодировкой ANSI или UCS2.

+0

Я говорю о SQL Server здесь, а не о FoxPro, но я думаю, что я могу частично следовать тому, что вам нужно. Пожалуйста, завершите свой ответ, чтобы другие могли воспользоваться им. –

+0

@JeroenWiertPluimers спасибо, исправлено (я отправил неправильную ссылку, но ситуация в SQL Server похожа). –

+0

Большое спасибо. Поддержка varbinary и двоичных данных в этом случае имеет гораздо больший смысл, чем поддержка целочисленных типов данных. Любые указатели на endian-ness и 8-битную или 16-битную кодировку? Даже когда нет: +1; принято. –

Смежные вопросы