尧图网络 高端网站定制 · 原创设计
免费咨询热线
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/15 22:02:20
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/21 13:42:40
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/9/16 13:24:52
MORE NEWS

更多资讯

📰

ARTEX漏洞推送六渠道完整配置:钉钉、飞书、企业微信、Telegram与邮件实战

【免费下载链接】ARTEX Autumn-27/ARTEX 持续维护开源版本 项目地址: https://gitcode.com/gh_mirrors/artex/ARTEX 点击查看 免费下载 ARTEX 漏洞推送功能可以让每一次高危漏洞发现都第一时间送达你的 IM 群或邮箱。它内置了钉钉、飞书、企业微信、通用 Webhook、…

📰

Macro desktop-cef 深度解析:用 Chromium(CEF)为 macOS 构建 Tauri 桌面端

后端前端协同办公即时通讯企业应用CRMAI Agent人工智能 【免费下载链接】macro Macro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — -linked together with shared AI memory. 项目地址: https://gitcode.com/GitHub_Tr…

📰

BlueprintJS 选型与上手指南:React 数据密集型应用的桌面 UI 底座

BlueprintJS 选型与上手指南:React 数据密集型应用的桌面 UI 底座 【免费下载链接】blueprint A React-based UI toolkit for the web 项目地址: https://gitcode.com/gh_mirrors/bl/blueprint BlueprintJS 是 Palantir 出品的 React 组件库,定位…

📰

awesome-openclaw技能生态指南:ClawHub与5400+个Skills如何挑选与安装

【免费下载链接】awesome-openclaw A curated list of the best OpenClaw resources: official projects, skills, plugins, dashboards, deployment tooling, memory systems, and guides. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-openclaw 点击查看…

📰

从自动点到AI智能助手:ShizukuDhizuku-list自动化AI工具盘点,让手机替你干活

【免费下载链接】ShizukuDhizuku-list 一个收集支持Shizuku和Dhizuku的软件的项目 项目地址: https://gitcode.com/gh_mirrors/sh/ShizukuDhizuku-list 点击查看 免费下载 想让手机自动点签到、自动执行脚本,甚至用一句话"指挥"手机&#xff…

📰

WPF三种启动方式 + 静态资源 + 数据绑定 满分知识点整理

模块一:WPF应用程序三种启动方式(必考大题)1.1 三种方式核心对比(背诵)方式1:StartupUri 指定启动页(推荐、最常用)特点:XAML直接配置、写法最简、无需后台代码缺点&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

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

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

📞 💬