- SQLite 3 中的字符串可以包含
NUL
字符吗? - 如果 1 的答案是“是”,那么它们如何写在 SQL 查询中?SQLite 似乎没有
chr
或没有char
功能。
问问题
716 次
2 回答
3
一般来说,不——SQLite 内部不是 8 位干净的,可能是由于它的 Tcl 遗产。虽然 NUL 不会导致损坏问题,但 SQLite 通常会在第一个嵌入的 NUL 字符处停止处理字符串。
即使对于像 GLOB 这样的运算符也是如此。例如,GLOB
当您嵌入 NUL 字符时,您无法匹配 BLOB 列,例如这个
select * from table where blobcol glob x'00022a';
将只匹配空 blob 值:虽然您可以使用文字 BLOB 语法(即x'hexdigits'
)并在使用字符串的地方使用结果值,但 SQLite 通常只使用第一个 NUL 之前的部分。
至少,。这是包括 SQLite 3.26.0 在内的情况。
请注意,SQLite 也有一个 BLOB 类型,它可以毫无问题地存储嵌入式 NUL,但是 SQLite 中几乎没有使用它们的功能,而且它们通常更难从 SQL 接口库中使用。
它们还在许多上下文中默默地转换为字符串,此时嵌入式 NUL 再次开始引起问题。
于 2019-03-22T00:58:52.590 回答
1
不确定从哪个版本开始支持它,但您可以这样做:
create table foo (bar data);
insert into foo(bar) values (x'001122334400ff');
select length(bar),hex(bar),bar from foo;
于 2010-10-29T14:59:57.527 回答