SQLite LIKE 字面搜索:参数绑定之后,百分号和下划线仍然需要转义 用户输入文件名片段“报告_终稿”,搜索结果却出现“报告甲终稿”。即使查询使用了问号占位符,这个结果仍可能完全符合数据库规则:参数绑定确保输入作为数据传递,而 LIKE 会继续把数据里的下划线解释成单字符通配符。搜索框... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite UNIQUE 遇到 NULL:用部分唯一索引限制每个用户只有一个默认项 地址簿里每个用户可以保存多条地址,但最多只能有一个默认地址。有人会增加一个可空标记,再建立联合唯一索引,期待数据库自动理解“默认只能有一个”。问题在于,唯一约束比较的是被索引的值,它不会替应用推断哪类记录需要竞争同一... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python urlencode 展开列表参数:doseq、空列表与字符串化要一起设计 为搜索服务生成请求时,一个筛选项可能选中多个标签。Python 字典里放一个列表很方便,但把字典直接交给 urlencode,并不会自动得到多个同名参数。是否展开由 doseq 控制;没有明确选择时,接收端可能读到列... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python Base64 严格解码:字符合法之后,还要约定字母表与填充 上传接口收到一段编码字符串,解码成功并不一定说明输入格式符合协议。Python 的 Base64 默认解码会先丢弃不属于字母表的字符,再检查填充。因此,把异常捕获当作唯一的输入验收,有时会放过原本应该拒绝的标点与空白... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript every 与 some:空数组通过了“全部合格”,业务真的允许吗 提交一张必须至少包含一条明细的表单,校验写成每条数量都大于零,空表单却顺利通过了。问题并不是 every 漏做了某次回调,而是“每个已有元素都满足条件”与“至少存在一个元素,并且全部满足条件”本来就是两个不同要求。e... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
JavaScript Date 按年月日创建:本地零点与 UTC 零点为什么不是同一刻 页面选择十月一日,保存成 ISO 字符串后却显示九月三十日,这不一定意味着数据丢了一天。一个年月日可以表达当地日历中的日期,而 Date 需要表示时间轴上的一个时刻。把当地零点换成 UTC 表示,日期部分完全可能落在... yunqueblog/ 技术教程/ 2026-10-01/ 2 阅读
Bash 双中括号的引号:同一个星号,为什么有时匹配整串有时只认自己 过滤名称时,把匹配模式存进变量是常见做法,但给变量补上双引号后,原本能匹配的文件名突然不通过了。这不一定是脚本写错引号,而是双中括号里的比较运算符允许右侧表达式承担不同职责:有时它是模式,有时它是字面文本。先写出问题... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Bash 命令替换会删掉末尾换行:加了双引号为什么仍然少几个字符 脚本把命令输出放进变量,再原样写回文件,结果文件末尾的空行没了。变量两边明明加了双引号,为什么仍会改变内容?原因可能发生在引用之前:常用的美元括号命令替换,会移除输出末尾连续的换行字符,双引号并不能撤销这一步。这种规... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
SQLite EXCEPT 做差集:缺少的编号与缺少的明细不能用同一种比较 核对两份导出清单时,常会问“左边有哪些右边没有的内容”。这句话看起来明确,实际却至少有两种意思:缺少哪些编号,或缺少哪些编号与状态的组合。EXCEPT 比较的是查询输出的整行,选择哪些列,本身就在定义什么算同一条。它... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读
Python 浅拷贝与嵌套对象:外层换了一份,里面为什么仍会一起变 复制一份任务清单做预览,给预览中的标签加个标记,原始清单却也跟着变化。即使两个列表的身份已经不同,这件事仍可能发生。复制容器与复制容器引用的所有内容是两个动作,只检查外层不是同一个对象,无法证明内部修改已经隔离。理解... yunqueblog/ 技术教程/ 2026-10-01/ 3 阅读