数据库连接
共 184 篇文章
MySQL CONCAT 拼接姓名后,LIKE 搜不到姓氏为 NULL 的记录
MySQL 可空姓名字段参与 CONCAT 后,整个拼接结果变为 NULL,LIKE 因而漏掉记录。按姓名格式选择逐参数 COALESCE 或 CONCAT_WS,并区分空字符串与空值。
PostgreSQL 用 array_length 等于 0 查不到空数组
PostgreSQL 空数组的 array_length 返回 NULL,等于 0 的条件因此漏选。改用 cardinality 判断元素数量,并区分空数组、NULL 数组和含 NULL 元素的数组。
SQLAlchemy 设置 expire_on_commit=False 仍报 DetachedInstanceError:会话已关闭
SQLAlchemy 返回 ORM 对象后读取属性报错时,核对 sessionmaker 会话范围、已加载数据与序列化边界;关闭会话不受 expire_on_commit=False 阻止。
SQLite SUM 已转为 BIGINT,仍报 integer overflow
SQLite BIGINT 不扩大 SUM 的整数累加范围。区分允许近似的 REAL 聚合与精确大整数求和,保留原始数值并核对空集合及中间溢出。
SQL Server 创建外键时报 1785:级联路径重复到达同一张表
SQL Server 新增级联外键时报 1785,沿删除和更新方向检查重复路径,保留外键并选择 NO ACTION 或修正模型,验证业务删除语义。
DuckDB 已设 read_only 仍报 Could not set lock:其他进程仍在读写
Python 已设置 read_only=True,仍可能被另一个读写进程的文件锁挡住。核对所有客户端的打开模式,按只读共享或顺序读写安排任务。
SQLite LIKE 搜索西里尔字母时忽略大小写失效
SQLite 内置 LIKE 和 upper() 默认只转换 ASCII,西里尔字母搜索可能漏匹配。用常量定位,在 Microsoft.Data.Sqlite 中注册专用转换函数,并核对连接、语言规则与通配符边界。
pgJDBC 查询 JSONB 问号运算符时报参数未绑定
PreparedStatement 会把单问号当作值参数。JSONB 运算符用 ?? 转义,真正的占位符继续绑定,并核对 ORM 到 JDBC 的解析层。
MongoDB 用 $not: null 查询非空字段时报 invalid use of $not
顶层标量字段需要存在且非null时可使用$ne:null。区分字段缺失、显式空值和空字符串,修正$not语法,并保留数组路径的适用边界。
Mongoose find 能查到 ID,aggregate 却返回空数组
普通查询按 schema 转换参数,聚合管道不会自动转换。确认存储为 ObjectId 后,在输入边界校验并构造 BSON 值,保留授权条件。
pyodbc 中断查询后报 Connection is busy:检查旧游标结果
中断 SQL Server 大查询后,旧语句或未消费结果可能使同一 ODBC 连接拒绝新查询。区分结果消费、游标关闭、取消、事务结束与 MARS 的适用条件。
psql 连接时报 invalid percent-encoded token
psql 连接 URI 报 invalid percent-encoded token,可能是密码中的百分号未正确编码。区分 shell 引号与 URI 编码,使用密码提示或密码文件保留原始密码,并核对实际连接目标。
SQLite 原目录报 readonly,复制到其他目录却能写:检查目录权限与 UAC
SQLite 同一数据库换目录后能写,原位置却报 readonly,检查有效用户、目录及辅助文件权限,区分 UAC 诊断与长期修复。
MongoDB 连接串报 Password contains unescaped characters:只编码凭据部分
MongoDB URI 密码含特殊字符导致解析失败,分别编码原始用户名和密码,检查重复编码,区分解析、认证与网络故障。
Alembic 建索引报 cannot run inside a transaction block
Alembic 迁移中并发建索引被 PostgreSQL 事务块限制拒绝时,用 autocommit_block 划分执行区段,并核对提前提交、失败遗留无效索引及降级边界。
HikariCP 长任务后 MySQL 通信失败:连接已借出却长时间没有 SQL
区分池内空闲和任务持有连接;核对会话与网络超时,避免用 maxLifetime 或自动重连掩盖事务边界问题。
Redis 写入报 READONLY:先确认节点角色和主写入端点
读请求正常而写入落到只读副本时,核对 ROLE、应用连接池与 Sentinel 主节点发现;不以关闭只读保护或盲目提升副本处理。
asyncpg 在线改表后报 InvalidCachedStatementError:旧缓存遇到新结构
在线修改 PostgreSQL 结构后,旧连接的查询计划或类型缓存可能失效。区分事务内外处理、直接 asyncpg 与 SQLAlchemy 的缓存参数,并安排迁移和连接生命周期。
MySQL 临时表自连接报 ERROR 1137:换别名仍引用同一张表
MySQL 临时表自连接报 1137 时,识别同一张 TEMPORARY 表的重复引用,按版本与结果使用范围选择 CTE 或独立临时副本。
pyodbc 报 Login failed for user 空用户名:先检查 UID/PWD 属性
pyodbc 在证书错误之后报空用户名登录失败,核对 ODBC UID/PWD 属性、SQL 登录与 TLS 验证,避免把不同阶段的问题混在一起。


