实测 MySQL ERROR 1366:建表写 charset=utf8 实际是 utf8mb3,放 emoji、生僻字 𠮷 都报 1366,汉字和 € 不会;连接字符集错配矩阵里 utf8mb4 列 + latin1 连接写汉字不报错、读回 汉;convert to utf8mb4 在 10 万行表上 453 ms,COMPACT 老表撞 767 字节索引上限(1071),先改 DYNAMIC 即可。
实测 MySQL ERROR 1153:服务器上限 1 MiB 时 PyMySQL 看到的是 2006 加 Broken pipe、命令行客户端才是 1153;整条 SQL 最长 1048574 字节,PyMySQL 的 bytes 参数被拼成十六进制只能放 524271 字节;SET GLOBAL 只对新连接生效,SET SESSION 报 1621;executemany 的 max_stmt_length 是 1024000;客户端限制是 ERROR 2020。
实测 MySQL ERROR 1055 ONLY_FULL_GROUP_BY:关掉它之后 name 是组里任意一行,换成 idx_ds(dept, salary) 索引结果就变(恰好最高薪的部门 8/1000 变成 0/1000);GROUP BY 主键、非空唯一列不报错而可空唯一列报错;20 万行每组取最高薪:ANY_VALUE 全错 147.8 ms,窗口函数 358.9 ms,JOIN 子查询 5.5 ms,相关子查询 5298.3 ms。
实测 MySQL ERROR 1215:在 26.10.0 上类型不兼容报 3780,被引用列不是唯一键完整列报 6125,父表打不开报 1824,只有子表是临时表还报 1215;foreign_key_checks=0 绕不过 3780;MyISAM 子表悄悄忽略外键;已有孤儿行加外键报 1452,关掉检查可以硬加但孤儿行还在;1451 与 1452 的方向。
实测 MySQL 2006 与 2013:空闲超过 wait_timeout 后下一次使用报 2006 且连接作废;KILL 与 kill -9 服务器中途报 2013,KILL QUERY 报 1317 连接保留;客户端 read_timeout 到期报 2013 但服务器上的查询照常跑完;40 次使用里不检查失败 22 次、recycle 与 ping 都是 0;应答丢失的 INSERT 重试后无唯一键表里变成 2 行。
实测 Redis MISCONF:BGSAVE 因目录只读失败后,有保存点的实例所有写命令(以及 PING)返回 MISCONF,读命令照常;原因在 redis.log 的 Permission denied;没有保存点或 stop-writes-on-bgsave-error no 都不触发;修好目录后重新 BGSAVE 成功,写自动恢复。
实测 Redis OOM command not allowed:maxmemory 20mb 下 noeviction 写 40000 个 1 KB key 成功 15090、报错 24910,used_memory 略超上限;9 类写命令被拒、8 类读删命令照常;DEL 能立刻恢复写;30 MB 的单个 value 直接被拒;allkeys-* 淘汰后 0 次 OOM,volatile-lru 在 key 没有 TTL 时仍然 14900 次 OOM。
实测 Redis WRONGTYPE:13 条命令 × 6 种类型的矩阵(每条命令只有一种类型能 ok);TYPE / EXISTS / DEL 等不看类型;SET 与 RENAME 悄悄覆盖任何类型的 key 而 SET NX / COPY 不会;MULTI/EXEC 与 Lua 里出错不回滚;SCAN … TYPE 找出 user:* 里混进来的 3 个字符串 key。
实测 Redis NOAUTH / WRONGPASS / NOPERM:认证之前连 PING 都被 NOAUTH,只有 AUTH、RESET、QUIT 能用;密码错、用户名不存在、用户被禁用都是同一条 WRONGPASS;没设密码的实例上 AUTH default x 反而返回 OK;ACL 的三种 NOPERM 文本;改 requirepass 不影响已认证的旧连接;redis-cli -a 的警告与 REDISCLI_AUTH。
实测 Redis DENIED protected mode:bind 0.0.0.0 + protected-mode yes + 没设密码,局域网来源的连接一进来就被主动发来 1064 个字符的 DENIED 然后断开,127.0.0.1 正常;设 requirepass 后变成 NOAUTH,AUTH 后可用;bind 成局域网地址不关保护模式;只 bind 127.0.0.1 则连接被拒绝。
实测 Redis BUSY:死循环脚本下其它命令先毫无回复、等脚本跑过 busy-reply-threshold(这里 1000 ms)才收到 BUSY;阈值大于慢脚本时别人只是被挂住 1.70 s 后正常返回;BUSY 期间 PING、INFO、CONFIG SET 也全部 BUSY;写过数据的脚本 SCRIPT KILL 返回 UNKILLABLE;FUNCTION 要用 FUNCTION KILL。
实测 Python [SSL: CERTIFICATE_VERIFY_FAILED]:默认加载 188 个根证书(来自 OpenSSL 的 cert.pem);自签名 18、缺签发者 20、过期 10、主机名不匹配 62、缺 Authority Key Identifier 85 各是什么;cafile= 或 SSL_CERT_FILE 能解决 CA 不认识和缺中间证书,解决不了过期与主机名;关闭校验会接受冒充者的证书。