SQLite 中的 NUL 字符陷阱
Nul Characters in Strings in SQLite
SQLite 允许在字符串中间存储 NUL 字符,但这会引发令人困惑的意外行为。当你使用 length() 或 quote() 函数时,它们只计算到第一个 NUL 字符为止;CLI 工具甚至会在输出中直接截断 NUL 之后的所有内容。这导致数据库明明存储了 7 个字符,查询时却只显示 3 个,让你误以为数据被截断或存在 Bug。实际上,这是 SQLite 的既定机制。文章详细演示了如何通过 CAST 为 BLOB 或使用 instr() 函数来检测这些隐藏的 NUL 字符,并提供了清理数据的 SQL 方案。如果你正在处理包含二进制数据的文本字段,务必小心这个隐蔽的坑。
"SQLite 允许在存储在数据库中的字符串值中间包含 NUL 字符,但这样做可能会导致令人惊讶的行为。"