程序员茄子
全部
编程
代码
资讯
案例
综合
联系我们
软件定制开发/软件按需定制 技术文章
php
mysql
shell
go
vue
css
api接口对接
支付接口对接
Protobuf 字段改编号会毁数据、改名字却没事:wire 层的破坏性变更规则
编程
Protobuf 字段改编号会毁数据、改名字却没事:wire 层的破坏性变更规则
2026-10-16 00:05:56
Protobuf 二进制线上格式按字段编号而不是名字编码,所以改名安全、改编号会悄悄毁数据。本文给出 wire 层判定表、reserved 的意义、int32→int64 这类条件安全改动、删字段的三步生命周期,以及 buf breaking 的 WIRE/WIRE_JSON/PACKAGE/FILE 四层检查。
BC破坏性变更
Protobuf
gRPC
向后兼容
破坏性变更
API设计
MySQL 报 ER_1366 Incorrect string value:从驱动到字段排查连接字符集链
编程
MySQL 报 ER_1366 Incorrect string value:从驱动到字段排查连接字符集链
2026-10-16 00:05:00
存 emoji / 中文报 ER_1366 Incorrect string value、ER_1300、ER_3988 时,问题常在客户端、连接层、服务端对象三处字符集不统一。给出 SHOW VARIABLES 该看的变量、SET NAMES 与 character-set-client-handshake、实例→库→表→字段的修改优先级,以及 PHP/Python/Go/JDBC 驱动侧配置与 latin1 双重编码陷阱。
utf8mb4
MySQL
字符集
乱码
emoji
排障
数据库
collation
SemVer 范围与依赖解析:^ 和 ~ 的边界、锁文件、扁平与嵌套
编程
SemVer 范围与依赖解析:^ 和 ~ 的边界、锁文件、扁平与嵌套
2026-10-16 00:04:57
把 SemVer 范围写法展开成区间(^、~、0.x 退化、预发布默认不匹配),讲清范围与锁文件的分工、npm ci/--frozen-lockfile/cargo --locked 的冻结安装、应用与库是否提交锁文件,以及扁平与嵌套两种解析策略和 npm hoisting 的副作用。
语义化版本
SemVer
依赖管理
锁文件
npm
添加一个字段安全,改一个默认值就破坏:判断改动算不算破坏性变更
编程
添加一个字段安全,改一个默认值就破坏:判断改动算不算破坏性变更
2026-10-16 00:04:48
用一张判定表和三层兼容(二进制/源码/行为)模型,讲清哪些改动算破坏性变更:加字段、改默认值、收紧校验、改参数名、加 virtual 分别会破坏谁;附原生 DLL、COM、.NET 的具体机制与并行提供→弃用期→删除的发布流程。
BC破坏性变更
向后兼容
破坏性变更
API设计
语义化版本
兼容性
SemVer 2.0.0 优先级比较:alpha.10 排在 alpha.9 之前,以及五个实现坑
编程
SemVer 2.0.0 优先级比较:alpha.10 排在 alpha.9 之前,以及五个实现坑
2026-10-16 00:04:24
从 SemVer 2.0.0 规范的优先级比较算法切入,讲清 alpha.9 与 alpha.10 的排序、前导零非法、构建元数据不参与比较、0.x 下 ^ 退化,以及 Go 的 v 前缀与 golang.org/x/mod/semver 用法,附可运行的排序与校验示例。
语义化版本
SemVer
版本号
依赖管理
Go
pt-online-schema-change 在线改表:1 条触发器硬约束、4 道安全阀与手动 swap 流程
编程
pt-online-schema-change 在线改表:1 条触发器硬约束、4 道安全阀与手动 swap 流程
2026-10-16 00:03:58
pt-online-schema-change 靠触发器把改表期间的增量同步到新表,再用原子 RENAME 换表,从而不锁原表。本文按官方文档梳理它为什么不锁表、外键四种处理方式、主键/触发器/复制/负载四道安全阀,以及 --alter 的硬约束与推荐的 dry-run 到手动 swap 上线流程。
在线改表
pt-online-schema-change
MySQL
OnlineDDL
DDL
Percona
触发器
ICU MessageFormat 落地笔记:六个 CLDR 复数类别、`=N` 优先级与 MF2 技术预览(ICU 75.1)
编程
ICU MessageFormat 落地笔记:六个 CLDR 复数类别、`=N` 优先级与 MF2 技术预览(ICU 75.1)
2026-10-16 00:03:52
讲清 ICU MessageFormat 的工程细节:六个 CLDR 复数类别、other 必填与 =N 精确匹配的优先级、select/plural 嵌套顺序、花括号转义、skeleton 为何优于 string pattern,以及 MF2 在 ICU 75.1 的技术预览状态和 FormatJS/messageformat 两个实现库。
i18n
国际化
ICU
MessageFormat
CLDR
前端
utf8mb3 转 utf8mb4:767 字节索引上限、191/768 前缀与 row size 8126 的踩坑记录
案例
utf8mb3 转 utf8mb4:767 字节索引上限、191/768 前缀与 row size 8126 的踩坑记录
2026-10-16 00:03:48
从 utf8mb3 转 utf8mb4 时,内容没问题但表结构常被 InnoDB 的字节上限卡住:COMPACT 行格式 767 字节对应 191 字符前缀、DYNAMIC 行格式 3072 字节对应 768 字符,以及 TINYTEXT/VARCHAR 长度、row size 8126、ER_1071/1709/1118 报错与可执行修复 SQL。
utf8mb4
MySQL
字符集
索引
InnoDB
运维
数据库
Vue3 Composables 的四种设计模式:状态封装、异步请求、副作用与组合
编程
Vue3 Composables 的四种设计模式:状态封装、异步请求、副作用与组合
2026-10-15 21:31:41
同一个 onMounted+ref+watch 片段在第三个页面重复出现,就该抽 composable 了。本文把 Vue 3 组合式函数收敛成四种模式:状态封装(readonly 包装返回)、异步请求(MaybeRefOrGetter 自动重请求)、副作用管理(清理用 onScopeDispose 而非 onUnmounted)、组合复用,并给出粒度权衡、三个易踩坑与目录分层/测试方法。
Vue3
Composables
组合式函数
前端
TypeScript
Vue Flow:Vue 3 流程图组件的安装、数据结构与样式导入坑
代码
Vue Flow:Vue 3 流程图组件的安装、数据结构与样式导入坑
2026-10-15 21:31:37
Vue Flow 是面向 Vue 3 的流程图/节点编辑器组件,基于 React Flow 与 D3.js 实现缩放平移。本文给出安装、nodes/edges 数据结构、Quickstart 代码,并说明样式必须单独导入且不能用 scoped 这个高频坑,以及 Background/MiniMap/Controls 附加组件与本地开发命令。
Vue
Vue3
流程图
组件库
TypeScript
LocalAI 4.11:一个模型名后面挂本地+远端多条链路,失败自动切换
编程
LocalAI 4.11:一个模型名后面挂本地+远端多条链路,失败自动切换
2026-10-15 21:04:40
LocalAI 4.11 引入模型故障转移链:把本地与远端目标挂在同一个模型名后面,在响应提交前按链重试并切换,可从 API/MCP/UI 固定目标;模型库改为以 OCI artifact 分发,按 Sigstore 校验并用 digest 绑定的 last-known-good 缓存回退。文中讲清这两条主线的配置与取舍。
LocalAI
自托管
运维
AI
升级 Stripe API 到 2026-09-30.endive:Checkout 的 payment_method_types 没了,SDK 也改了默认校验行为
编程
升级 Stripe API 到 2026-09-30.endive:Checkout 的 payment_method_types 没了,SDK 也改了默认校验行为
2026-10-15 21:03:21
Stripe 当前 API 版本 2026-09-30.endive 带来一批破坏性改动:Checkout Sessions 与 Payment/Setup Intents 移除 payment_method_types、Elements 改 allowedPaymentMethodTypes;SDK 路径参数改为 positional-only、verifyHeader 默认校验时间戳。文中给出 API、SDK 与 webhook 三条迁移路径。
Stripe
支付
API
接口对接
mise 日常命令改走 mise-versions:没配 GitHub token 也不用撞 60 次/小时限流
编程
mise 日常命令改走 mise-versions:没配 GitHub token 也不用撞 60 次/小时限流
2026-10-15 21:03:21
mise v2026.10.11 让 install/exec/outdated/lock/self-update 等命令不再调用 api.github.com,改从 mise-versions 读取 release、tag 与 attestation,没配 token 的用户不再撞 60 次/小时限流。文中讲清仍直连 GitHub 的场景,并提到 path: 工具的 PATH 信任绕过修复。
mise
开发工具
GitHub
Shell
Caddy 2.11.6 的 60 秒 idle 超时掐断了 SSE,2.11.7 修掉回归并引入 RFC 10036 的 Incremental 头
编程
Caddy 2.11.6 的 60 秒 idle 超时掐断了 SSE,2.11.7 修掉回归并引入 RFC 10036 的 Incremental 头
2026-10-15 21:03:21
Caddy 2.11.6 为缓解 Slowloris 加了默认 1 分钟 idle 超时,却引入两个回归:HTTP/2 下反向代理读请求体时 panic,HTTP/1.1 下用 POST 打开的 SSE 在读完 body 后正好 60 秒被掐断。2.11.7 修掉,并新增 RFC 10036 的 Incremental 头(X-Accel-Buffering 的标准替代)。
Caddy
SSE
反向代理
HTTP
2
Inertia.js 3.9:后台标签页轮询可暂停,退出登录后 Back 键不再翻出缓存里的受保护页面
代码
Inertia.js 3.9:后台标签页轮询可暂停,退出登录后 Back 键不再翻出缓存里的受保护页面
2026-10-15 21:03:21
Inertia.js v3.9 给 usePoll/router.poll 加了 background 选项,可让隐藏标签页的轮询暂停或继续,替代已弃用的 keepAlive;同时 clearHistory 会一并清空 prefetch 缓存,修掉退出登录后按 Back 翻出缓存受保护页面的问题,并说明这是本地展示边界而非鉴权绕过。
Inertia.js
Vue
前端
Laravel
Traefik 3.7 原生吃下 85+ ingress-nginx 注解,无需改写 YAML
编程
Traefik 3.7 原生吃下 85+ ingress-nginx 注解,无需改写 YAML
2026-10-15 21:03:21
Traefik Proxy v3.7 把 Ingress NGINX provider 转正:原生支持 85+ 常用 ingress-nginx 注解,现有 manifest 可带上直接迁移,不必重写 YAML。文中还讲清 snippets 的 allowlist 安全取舍、middlewares on services、以及按响应状态码重试与故障转移的配置边界。
Traefik
Kubernetes
Ingress
反向代理
systemd 262:服务重启加随机抖动、Slice 限并发激活、System V 脚本彻底删除
编程
systemd 262:服务重启加随机抖动、Slice 限并发激活、System V 脚本彻底删除
2026-10-15 21:03:21
systemd 262 新增 RestartRandomizedDelaySec 给自动重启加随机延迟,Slice 新增 ActivatingConcurrencyMax 限制并发激活;同时提醒三处破坏性变更:遗留 udev 控制 socket 改 Varlink、System V 脚本支持移除、非系统用户/组弃用。
Linux
systemd
运维
服务管理
Compose 升到 v5.5 后,第一次 up 会把已有容器重建一遍
编程
Compose 升到 v5.5 后,第一次 up 会把已有容器重建一遍
2026-10-15 21:03:21
Docker Compose v5.5 重做了镜像 digest 对账逻辑,升级后第一次 compose up 会把已有容器重建,属预期而非回归。文中梳理 v5 与 v2 的关系、Go SDK 的意义、pull_policy 刷新窗口、jobs 与 init 容器的现状与限制。
Docker
Compose
容器
运维
PG19 的 REPACK:把 VACUUM FULL 和 CLUSTER 合成一条命令,CONCURRENTLY 不阻塞读写
编程
PG19 的 REPACK:把 VACUUM FULL 和 CLUSTER 合成一条命令,CONCURRENTLY 不阻塞读写
2026-10-15 21:03:21
PostgreSQL 19 新增 REPACK,合并 VACUUM FULL 与 CLUSTER 的功能,REPACK ... CONCURRENTLY 可在不阻塞读写的情况下重建表。文中对比两者的锁与磁盘/时间取舍,并列出 Beta4 回退的特性(SQL/PGQ、在线开关 checksums 等),避免照 beta1 公告做规划。
PostgreSQL
数据库
运维
SQL
Redis 8.2 的 XACKDEL/XDELEX:多消费者组下,确认并删除流条目一条命令搞定
编程
Redis 8.2 的 XACKDEL/XDELEX:多消费者组下,确认并删除流条目一条命令搞定
2026-10-15 21:03:21
Redis 8.2 新增 XACKDEL 与 XDELEX,把「确认后清理已确认条目」的应用层逻辑收回 Redis,并用 KEEPREF/DELREF/ACKED 控制消费者组引用处理。文中对比引用计数延迟回收与确认即删两条路线,并附 BITOP 新算子、CLUSTER SLOT-STATS 与内存性能数字。
Redis
Stream
缓存
数据库
Heron:agent 只读采集、hub 不下发命令的自托管主机监控
案例
Heron:agent 只读采集、hub 不下发命令的自托管主机监控
2026-10-15 20:02:43
Heron 是 Go 写的轻量自托管主机监控:hub 用一个静态二进制加 SQLite 文件存储、展示、告警,agent 只读采集上报。它的安全边界设计值得一读——agent 不照单执行 hub 指令,hub 能影响的只有上报节奏、探测任务、出口地址探测开关和验签后的更新任务。附安装命令与平台限制。
运维
监控
Go
自托管
开源项目
MySQL 26.7.0 Innovation 发布:Thread Pool Plugin 进社区版,Group Replication 默认通信栈换成 MYSQL
资讯
MySQL 26.7.0 Innovation 发布:Thread Pool Plugin 进社区版,Group Replication 默认通信栈换成 MYSQL
2026-10-15 20:01:57
MySQL 26.7.0 Innovation 发布:Thread Pool Plugin 进入社区版解决高并发下每连接一线程的调度开销,Group Replication 默认通信栈由 XCOM 换成 MYSQL 并开始弃用 XCom 配置,新增 Change Stream Applier 单写者复制通道;附 InnoDB、后量子加密等改动与版本线选择。
MySQL
数据库
Group
Replication
InnoDB
运维
订单超时关单撞上支付回调:微信返回 ORDERPAID 时不要当关单失败
代码
订单超时关单撞上支付回调:微信返回 ORDERPAID 时不要当关单失败
2026-10-15 09:01:43
订单超时自动关单任务和支付成功回调同时到达,就会出现「钱扣了、单关了」的幽灵订单。这篇按微信支付官方口径拆解:为什么先查状态再更新会漏,条件更新 SQL 的 WHERE 怎么写、RowsAffected=0 怎么二次判定,关单接口报 ORDERPAID 为什么是状态纠正而不是失败,迟到回调为什么不能拒,以及 T+1 账单怎么发现并处理单边账。
微信支付
订单关单
支付回调
单边账
幂等防重
对账
MySQL 排序规则迁移:utf8mb4_0900_ai_ci、89 种 collation 与 5.7 回导报错
案例
MySQL 排序规则迁移:utf8mb4_0900_ai_ci、89 种 collation 与 5.7 回导报错
2026-10-15 01:43:47
MySQL 8.0 把 utf8mb4 默认排序规则从 utf8mb4_general_ci 换成 utf8mb4_0900_ai_ci:拆解 collation 命名后缀、UCA 版本号、89 种 utf8mb4 排序规则从哪来,以及 8.0 建表回导 5.7/5.6 报错、NO PAD 与 PAD SPACE 的差异,给出选型与迁移注意点。
排序规则
collation
MySQL
数据库
字符集
utf8mb4
运维
大家都在搜索什么?
devops
易支付
一个官网+多少钱
统一接受回调
统一回调
python
sub
node
宝塔日志
mysql
shell
ElasticSearch
css
vue
api接口对接
2025
支付接口对接
go
php
php回调
上一页
1
2
3
4
5
6
7
…
329
下一页
共 329 页
到第
页
确定