最近在 Windows 上使用 Codex CLI 时,遇到了一个很诡异的问题:
- 直接在终端执行
bash -lc "echo 你好",输出正常。 - 让 Claude Code 帮我执行 bash,输出也正常。
- 只有 Codex 执行 bash 会出现中文乱码。
先放结论:这个问题最后不是靠 PowerShell 编码设置解决的,而是要给 Codex 设置 WSL_UTF8=1。

最近在 Windows 上使用 Codex CLI 时,遇到了一个很诡异的问题:
bash -lc "echo 你好",输出正常。先放结论:这个问题最后不是靠 PowerShell 编码设置解决的,而是要给 Codex 设置 WSL_UTF8=1。

在 AI 应用中,当 AI 助手需要调用本地文件系统或其他敏感工具时,出于安全考虑,需要在执行前获得用户的明确批准。Vercel AI SDK(文中使用 v6 版本,这狗东西 API 一直变来变去的)提供了工具审批(Tool Approval)机制,允许开发者在 AI 执行工具前拦截并请求用户确认。
注意这个参数主要是为了配合stopWhen(也就是工具自动调用),也就是:
1 | const result = streamText({ |
同时也注意这东西的调用方式灵活的很,毕竟他不是应用级别的封装,不用这套自己也可以搓一个出来。
同时在 AI SDK UI 中的调用流程是完全不一样的,这里只针对 Core 的 API。(但是其实也八九不离十了)
本文档说明如何在 Astro 项目中集成 Better Auth,使用 Drizzle 作为数据库适配器,PostgreSQL 作为数据库。
emmmm,文档是在实践完之后写的,不是边实践边写的,可能会有所遗漏,但是扫了几遍源码,应该八九不离十。
注意这个需要 server 支持,所以需要 server adapter,比如 node 的@astrojs/node。
我使用的是默认 static,需要后端运行时渲染的地方用export const prerender = false;,如果你的 output 设置为了 server,那么就不需要 prerender=false。
📖 官方文档参考:
首先,安装 Better Auth 及相关依赖:
1 | # 安装核心依赖 |
依赖说明:
better-auth: 认证核心库drizzle-orm: ORM 库,用于数据库操作pg: PostgreSQL 驱动drizzle-kit: Drizzle 开发工具(用于数据库迁移)dotenv: 环境变量加载(drizzle.config.ts 需要)编辑说明:本文初稿完成后,通过 Claude Code 进行了技术审阅和优化润色,修正了 UTF-16 编码方式的描述,补充了 Unicode 平面结构、代理对机制、MySQL utf8mb4 等深度内容,使文章在保持通俗易懂的同时更加准确严谨。
Unicode(统一字符集)
UTF-8(编码方式)
UTF-8 根据 Unicode 码点的大小,使用不同长度的字节:
| Unicode 范围 | 字节数 | UTF-8 格式 |
|---|---|---|
| U+0000 ~ U+007F | 1 字节 | 0xxxxxxx |
| U+0080 ~ U+07FF | 2 字节 | 110xxxxx 10xxxxxx |
| U+0800 ~ U+FFFF | 3 字节 | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000 ~ U+10FFFF | 4 字节 | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
01000001(1 字节)11100100 10111000 10101101(3 字节)11110000 10011111 10011000 10001010(4 字节)在学习现代前端框架时,你可能会发现它们的 SSR(服务端渲染)与传统后端框架的 SSR 似乎不太一样。这篇文章将详细解释它们的本质区别,以及 SSR/CSR 和 SPA/MPA 这两个维度的概念关系。
工作流程:
1 | 浏览器 → 请求页面 → 服务器生成完整HTML → 返回HTML → 浏览器显示 |
特点:
工作流程:
1 | 首次访问: |
我的拖拉机又开动了(指显卡风扇的噪音)。
这次是阿里开源的 Z-Image-Turbo,6GB 显存也能跑,而且效果还挺好。这篇博客就是纯纯的配置教程,不整那些虚的,直接告诉你怎么让小显存的卡也能愉快生图。
首先,你需要:
官方已经给你做好工作流了,直接拖进 ComfyUI 的 web 界面就能用:
👉 官方工作流:https://comfyanonymous.github.io/ComfyUI_examples/z_image/
拖进去之后你会发现缺模型,别慌,继续往下看。
Next.js 作为目前最受欢迎的 React 全栈框架之一,凭借其强大的功能和“开箱即用”的体验赢得了大量开发者。然而,这种便利性很大程度上依赖于其创造者 Vercel 提供的原生托管平台。但是一旦开发者选择通过 Docker 自行部署,便会发现这条路并非坦途,充满了各种不易察觉的“坑”,并且会逐渐感受到框架本身的臃肿与对特定平台的深度绑定。
这里就总结了一下我这一年实践遇到的问题,建议没有 SEO 需求还是不要碰他了。
在自行部署的环境中,Next.js 的一些内部机制会变得异常棘手。以 React Server Components (RSC) 的请求为例,它与页面的请求路径一致,但会附加一个 ?_rsc=... 参数以区分(也会增加一些 header)。问题在于,这个参数(以及额外的 header)在到达我们自己的应用逻辑之前,往往已被 Next.js 框架内部“消化”。这意味着,在proxy.ts(16 之前的middleware.ts),无法捕获到 _rsc 这个参数。因此,从代码层面来看,开发者无法轻易判断一个传入的请求究竟是完整的页面加载请求,还是一个用于更新部分 UI 的 RSC 请求。
这在一些重定向场景中会造成一些问题。
基于 Next.js 16.0.1 官方文档整理
这边文档主要是 AI 总结+我补充实际遇到的问题,大部分是 AI 写的。
注意,文档里不包含use cache: private的内容,在写的时候本来官方文档里说依赖unstable_prefetch,但是后来一看这个内容又被移除了,不知道后续会不会再改,先不写了,以官方文档为准。API Reference > Directives > use cache: private
注意,现在的 16.0 还在不断变化中,还是等 16.1,16.2 再用吧。这东西太不稳了。
Cache components除了方便的 PPR+显式缓存,另外一个就是在框架层面(主要是 dev 和构建的时候),防止用户写出动态内容卡住整个页面加载的事,这在之前很容易写出来,网上也有很多批评的文章和视频,一看连loading.tsx和Suspense都不会用。😂
现在官方强制了,也是件好事吧。
Cache Components 是 Next.js 16 中一种新的渲染和缓存方法,通过 Partial Prerendering (PPR) 提供细粒度的缓存控制,同时确保出色的用户体验。
1 | Cache Components = PPR + use cache |
use cache 让你在外壳中包含优化的动态输出在开发动态应用时,你需要在两种方式之间权衡:
单次备份直接跑:
1 | docker exec -it mysql容器名/id mysqldump --all-databases -u用户 -p > ./mysql-backup/backup_$(date +%Y%m%d_%H%M).sql |
命令行提示输入密码
注意使用--all-databases会连 mysql 本身内部数据库也导出。
批量定时让 AI 写了个脚本,改了几个版本,测试过没啥太大问题。
不过这个版本会把密码留在命令行里,我这里是单独建了个 localhost 能用的密码,不放心可以写临时文件/放环境变量等方法。
会创建当前时间的文件夹,里面按照每个数据库存放对应名字的 sql,设置了过期时间。
这个只能针对比较小的数据库备份,几 G 的无所谓,几十 G 上百 G 的就很慢了(这种业务量还是买云上的数据库吧)。
定时部分直接用 crontab 调这个脚本就可以了。
1 |
|
在 Node.js 应用中使用 MySQL 时,时间戳(TIMESTAMP)字段出现的“8 小时差异”是一个经典难题。这个问题的根源并非单一因素,而是由 MySQL 自身的时区机制、mysql2 驱动的特定行为,以及一个极具迷惑性的默认配置共同造成的。
本文将澄清 MySQL TIMESTAMP 的存储与转换原理,并深入剖析 mysql2 驱动中 timezone 配置项的真正含义及其默认值'local'所带来的陷阱,最终提供两套清晰的最佳实践方案。