尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SQLite 字符串含 NUL 字符问题多,教你判断和移除!
字符串中的 NUL 字符1. 引言SQLite 允许数据库存储的字符串值中间包含 NUL 字符ASCII 0x00Unicode \u0000。然而在字符串中使用 NUL 可能会引发一些意外状况其一[length() SQL 函数](lang_corefunc.html#length) 仅统计到第一个 NUL 字符不包括该字符之前的字符数量其二[quote() SQL 函数](lang_corefunc.html#quote) 只显示到第一个 NUL 字符不包括该字符之前的字符其三[CLI](cli.html) 中的 [.dump](cli.html#dump) 命令在生成的 SQL 输出中会省略第一个 NUL 字符以及其后的所有文本实际上[CLI](cli.html) 在所有情况下都会省略第一个 NUL 字符之后的所有内容。所以不建议在 SQL 文本字符串中使用 NUL 字符。2. 意外行为来看下面这段 SQLCREATE TABLE t1( a INTEGER PRIMARY KEY, b TEXT ); INSERT INTO t1(a,b) VALUES(1, abc||char(0)||xyz); SELECT a, b, length(b) FROM t1;上述 SELECT 语句的输出为1,abc,3这里假设 [CLI](cli.html) 已设置为 [.mode quote](climode.html#dotmodequote)。但要是运行SELECT * FROM t1 WHERE babc;则不会返回任何行。SQLite 知道 t1.b 列实际存储的是一个 7 字符的字符串而 7 字符的字符串 abc||char(0)||xyz 不等于 3 字符的字符串 abc所以不会返回任何行。可这可能会让用户感到困惑因为 [CLI](cli.html) 的输出似乎显示该字符串只有 3 个字符。这看似是个 bug但这就是 SQLite 的运行方式。3. 如何判断字符串中是否有 NUL 字符若使用 [CAST](lang_expr.html#castexpr) 将字符串转换为 BLOB就能看到字符串的完整长度。例如SELECT a, CAST(b AS BLOB) FROM t1;结果如下1,X6162630078797a在 BLOB 输出中可以清晰地看到 NUL 字符是 7 字符字符串中的第 4 个字符。还有一种更自动化的方法是使用如下表达式判断字符串值 X 是否包含嵌入的 NUL 字符instr(X,char(0))如果该表达式返回非零值 N则表明在第 N 个字符位置存在嵌入的 NUL 字符。因此要统计包含嵌入 NUL 字符的行数可以使用以下语句SELECT count(*) FROM t1 WHERE instr(b,char(0))0;4. 从文本字段中移除 NUL 字符下面的示例展示了如何从表的某一列中移除 NUL 字符及其后面的所有文本。所以如果你有一个包含嵌入 NUL 字符的数据库文件并且想移除它们运行类似以下的 UPDATE 语句或许会有帮助UPDATE t1 SET bsubstr(b,1,instr(b,char(0))) WHERE instr(b,char(0));
RELATED

相关推荐

Poissonsearch-oss开发者指南:Java API使用技巧与自定义插件开发

Poissonsearch-oss开发者指南:Java API使用技巧与自定义插件开发

Poissonsearch-oss开发者指南:Java API使用技巧与自定义插件开发 【免费下载链接】poissonsearch-oss A near-realtime distributed search and analytics engine dirived from elasticsearch-oss 7.10.2. 项目地址: https://gitcode.com/openeuler/poissonsearch…

📅 2026/9/10 18:00:17
SillyTavern终极指南:打造沉浸式AI角色扮演体验的5个关键策略

SillyTavern终极指南:打造沉浸式AI角色扮演体验的5个关键策略

SillyTavern终极指南:打造沉浸式AI角色扮演体验的5个关键策略 【免费下载链接】SillyTavern LLM Frontend for Power Users. 项目地址: https://gitcode.com/GitHub_Trending/si/SillyTavern 你是否厌倦了千篇一律的AI对话体验?想要创建真正有个性…

📅 2026/9/10 16:19:54
WarcraftHelper开源项目实战指南:魔兽争霸III性能飞跃与兼容性修复

WarcraftHelper开源项目实战指南:魔兽争霸III性能飞跃与兼容性修复

WarcraftHelper开源项目实战指南:魔兽争霸III性能飞跃与兼容性修复 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏《魔兽争…

📅 2026/8/24 2:16:39
MORE NEWS

更多资讯

📰

eCapture CPU 占用优化指南:如何降低 SSL/TLS 无证书抓包的资源开销!

eCapture CPU 占用优化指南:如何降低 SSL/TLS 无证书抓包的资源开销! 【免费下载链接】ecapture Capturing SSL/TLS plaintext without a CA certificate using eBPF. Supported on Linux/Android kernels for amd64/arm64. 项目地址: https://gitcode…

📰

RK3568 Modbus RTU实战:UART驱动、T35检测与CRC16调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

如何用 CC Switch 在 Codex 中接入 DeepSeek 这类 Chat 格式 API 供应商

如何用 CC Switch 在 Codex 中接入 DeepSeek 这类 Chat 格式 API 供应商 【免费下载链接】cc-switch A cross-platform desktop All-in-One assistant for Claude Code, Codex, OpenCode, OpenClaw, Grok Build & Hermes Agent. Only official website: ccswitch.io 项目…

📰

Vue 3插槽技术解析与性能优化实践

1. Vue 3 插槽技术全景解析在Vue 3的组件化开发中,插槽(Slot)就像乐高积木的拼接接口,允许父组件向子组件注入动态内容。与Vue 2相比,Vue 3的插槽系统经过全面重构,性能提升40%的同时,新增了作用…

📰

Dubbo核心架构与性能优化实战指南

1. Dubbo核心架构全景解析作为一款高性能Java RPC框架,Dubbo的架构设计始终是开发者深入使用的必修课。我在实际微服务架构落地过程中,发现很多团队虽然能够快速搭建Dubbo环境,但对底层角色交互机制的理解往往停留在表面。今天我们就来彻底拆…

📰

嵌入式Linux下Modbus RTU串口配置与协议解析实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬