【问题标题】:Why SQL binary convert function results a non-0101... value?为什么 SQL 二进制转换函数会产生非 0101... 值?
【发布时间】:2015-03-06 21:24:18
【问题描述】:

为什么当我在 SQL Server 2005 中使用命令时

select convert(varbinary(16),N'123')

结果是0x310032003300 而不是1111011

【问题讨论】:

  • 因为它是二进制数据的十六进制表示。此外,您正在转换 unicode 字符串而不是整数。你到底想做什么?
  • 您正在将 Unicode 字符串转换为二进制,而不是数字。 SQL Server 还以 16 进制(十六进制)为您提供答案
  • 简单的答案是它是二进制数据。但是用一和零以二进制形式显示它没有用/不方便。你可能只是对这个词有一点误解。

标签: sql-server binary varbinary


【解决方案1】:

基本上,“123”的每个字母都会在 0x3100、0x3200、0x3300 的三个双字节中转换为它的 UCS-2(基本上是填充的 ASCII 值以使其成为双字节)值,并在 varbinar 中连接在一起。

希望能回答为什么您会看到这种行为。 如果您先转换为 int,您可能会看到可能希望得到的结果:

select convert(varbinary(16),cast(N'123' as int))

产生十六进制值0x0000007B,二进制为1111011

请参阅http://www.asciitable.com/ 数字 3 的条目,十六进制表示为 0x33,对应于 unicode 中的相同条目:http://www.ssec.wisc.edu/~tomw/java/unicode.html(此模式不一定适用于所有 ASCII/unicode 字符,但适用于 10整数)。

【讨论】:

    猜你喜欢
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-04
    • 2011-09-14
    • 1970-01-01
    相关资源
    最近更新 更多