最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
字符串中的 NUL 字元
时间:2026-07-16 17:43:55 编辑:袖梨 来源:一聚教程网
SQLite 允许在数据库中存储的字符串值中间使用 NUL 字符(ASCII 0x00、Unicode u0000)。然而,在字符串中使用 NUL 可能会导致令人惊讶的行为:

- length() SQL 函数仅计算第一个 NUL 之前的字符(不包括第一个 NUL)。
- quote() SQL 函数仅显示第一个 NUL 之前的字符(不包括第一个 NUL)。
- CLI 中的 .dump 命令会忽略它生成的 SQL 输出中的第一个 NUL 字符及其所有后续文本。事实上,CLI 在所有上下文中都会忽略第一个 NUL 字符之后的所有内容。
不建议在 SQL 文本字符串中使用 NUL 字符。
考虑以下 SQL:
上面的 SELECT 语句显示了以下输出:
(在本文档中,我们假设 CLI 设置了“.mode quote”。)但是如果您运行:
然后不会返回任何行。 SQLite 知道 t1.b 列实际上包含 7 个字符的字符串,并且 7 个字符的字符串 'abc'||char(0)||'xyz' 不等于 3 个字符的字符串 'abc',因此不会返回任何行。但用户可能很容易对此感到困惑,因为 CLI 输出似乎显示该字符串只有 3 个字符。这似乎是一个错误。但这就是 SQLite 的工作原理。
如果将字符串 CAST 为 BLOB,则会显示该字符串的整个长度。例如:
给出这个结果:
在 BLOB 输出中,您可以清楚地看到 NUL 字符是 7 个字符的字符串中的第 4 个字符。
另一种更自动化的判断字符串值 X 是否包含嵌入的 NUL 字符的方法是使用如下表达式:
如果此表达式返回非零值 N,则第 N 个字符位置存在嵌入的 NUL。因此,要计算包含嵌入 NUL 字符的行数:
以下示例演示如何从表的列中删除 NUL 字符及其后面的所有文本。因此,如果您有一个包含嵌入式 NUL 的数据库文件并且您想要删除它们,运行类似于以下内容的 UPDATE 语句可能会有所帮助:
本页面最后更新于 2022-05-23 22:21:54Z
相关文章
- 深夜自动贩卖机巷 07-16
- 东京天际线下的两位晚礼服女士 07-16
- 日本女性泳池畔肖像 07-16
- 无痛单词怎么更改单词背景 无痛单词更改单词背景方法 07-16
- 福昕PDF编辑器怎样设置PDF页眉页脚 07-16
- Visio营销图表绘制技巧 07-16