使用NUL的SQLite字符串

时间:2010-10-29 05:55:35

标签: sqlite null-character

  1. SQLite 3中的字符串可以包含NUL个字符吗?
  2. 如果对1的答案为“是”,那怎么能用SQL查询编写? SQLite似乎没有chrchar函数。

2 个答案:

答案 0 :(得分:1)

通常,不-SQLite内部不是8位纯净的,这可能是由于其Tcl传统。虽然NUL不会引起损坏问题,但SQLite通常会在第一个嵌入的NUL字符处停止处理字符串。

即使对于像GLOB这样的运算符,也是如此。例如,当您嵌入NUL字符时,例如,不能将BLOB列与GLOB匹配。这个

select * from table where blobcol glob x'00022a';

仅匹配空的blob值:虽然您可以使用文字BLOB语法(即x'hexdigits')并在使用字符串的地方使用结果值,但SQLite通常只在第一个NUL之前使用该部分。

至少,。这是直到SQLite 3.26.0为止的状态。

请注意,SQLite还具有BLOB类型,可以存储嵌入式NUL而不出现任何问题,但是SQLite中几乎没有使用它们的功能,并且通常很难从SQL接口库中使用它们。

它们还可以在许多情况下静默转换为字符串,这时嵌入式NUL开始再次引起问题。

答案 1 :(得分:0)

不确定从哪个版本开始支持,但您可以这样做:

create table foo (bar data);
insert into foo(bar) values (x'001122334400ff');
select length(bar),hex(bar),bar from foo;