Sql server 如何在SQL Server中真正创建零长度二进制值?
我正在编写一个ODBC绑定,我决定实现对Sql server 如何在SQL Server中真正创建零长度二进制值?,sql-server,tsql,Sql Server,Tsql,我正在编写一个ODBC绑定,我决定实现对binary的支持,我发现如果我插入0x,假定为“空字符串”,它将返回一个一字节的缓冲区,其中包含零。显然,这没有长度0: 1> CREATE TABLE demo (bar BINARY) 2> GO 1> INSERT INTO demo VALUES (0x) 2> GO (1 rows affected) 1> SELECT * FROM demo WHERE bar = 0x00 2> GO bar ----
binary
的支持,我发现如果我插入0x
,假定为“空字符串”,它将返回一个一字节的缓冲区,其中包含零。显然,这没有长度0
:
1> CREATE TABLE demo (bar BINARY)
2> GO
1> INSERT INTO demo VALUES (0x)
2> GO
(1 rows affected)
1> SELECT * FROM demo WHERE bar = 0x00
2> GO
bar
----
0x00
(1 rows affected)
1> SELECT DATALENGTH(bar) FROM demo WHERE bar = 0x00
2> go
-----------
1
但是,如果直接选择它,它将为空:
1> SELECT DATALENGTH(0x)
2> go
-----------
0
(1 rows affected)
所以从表中提取某些内容似乎有某种“最小值”为1个零字节
我的问题是,我们没有一个非常基本的“投入就是产出”的“投入就是产出”法则。如果有人使用我的ODBC绑定并插入空数据,他们将无法恢复空数据。这个坏了
我遗漏了什么?要点很简单
二进制
就像字符(1)
。您需要使用VARBINARY
从
二进制[(n)]长度为n字节的固定长度二进制数据,其中n是从1到8000的值。存储大小为n字节
及
varbinary[(n | max)]可变长度二进制数据。n可以是1到8000之间的值。max表示最大存储大小为2^31-1字节。存储大小是输入的数据的实际长度+2字节输入的数据长度可以是0字节。varbinary的ANSI SQL同义词是二进制变量
CREATE TABLE demo (bar VARBINARY(size));
INSERT INTO demo VALUES (0x);
SELECT DATALENGTH(bar), * FROM demo;
--length bar
-- 0 0x