SQLite 允许在数据库中存储的字符串值中间使用 NUL 字符(ASCII 0x00、Unicode u0000)。然而,在字符串中使用 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
OpenClaw安装部署及应用场景教程(2026最新完整版)实用指南
DeepSeek多模态怎么样及保姆级配置教程(codex、claude)实用指南
WSL2+Docker+Ollama本地部署大模型思路和实践指南(Qwen1.8b)实用指南
DeepSeek Harness热门插件盘点:10个实用插件,覆盖多Agent、上下文和多模态实用指南
grep文本搜索与正则表达式完整代码示例实用指南
AI漫剧伪装直男1‑24集无雾版夸克网盘资源免费分享