5
  1. SQLite 3 中的字符串可以包含NUL字符吗?
  2. 如果 1 的答案是“是”,那么它们如何写在 SQL 查询中?SQLite 似乎没有chr或没有char功能。
4

2 回答 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 回答