--- name: "fitness-db-access" description: "读写 fitness 库健康数据时用:中文写入须前缀 SET NAMES utf8mb4(否则报错 1265 截断),斤转 kg,写后回读校验" --- # Fitness 库读写 ## 连接方式 一律用 `~/.openclaw/scripts/db-conn.sh fitness --sql ""`(固定账号 `agent_fitness`)。 禁止 root、禁止 docker exec 直连、禁止访问其他 agent 的库。建表结构与字段以 AGENTS.md 为准,勿在此重复。 ## 含中文的 SQL 必须以 `SET NAMES utf8mb4;` 开头 脚本内的 mysql 客户端连接字符集默认是 latin1(实测 `character_set_client` / `character_set_results` 均为 latin1)。因此: - 写中文到 enum/文本列会直接失败:`ERROR 1265 (01000) ... Data truncated for column 'severity' at row 1` - 读中文会返回乱码(如 enum 显示成 `'?'`) 每条含中文的 SQL 都加前缀: ~/.openclaw/scripts/db-conn.sh fitness --sql "SET NAMES utf8mb4; INSERT INTO health_status_logs (...) VALUES (...)" ## 写入后回读(DML 与 DDL 都适用) `--sql` 以 `-N -B` 执行(制表符分隔、无表头),INSERT 无输出即成功。 随后同条件 SELECT 回读,确认中文无乱码、字段无截断,再报完成。 建表/改表同样静默成功,用 `DESC <表>`(或 `SHOW CREATE TABLE <表>\G` 看 COMMENT 与索引)回读确认,再报完成。 ## 体重单位换算 用户口述单位是「斤」,而 `body_records.weight` 存 kg(decimal(5,1)):kg = 斤 ÷ 2。 例:132.4 斤 → 66.2。 ## 身体尺寸 / 尺码卡查询 尺寸单一真相来源是 `body_measurements`(字段清单见 AGENTS.md,勿在此重复)。取最新一条即"尺码卡": ~/.openclaw/scripts/db-conn.sh fitness --sql "SET NAMES utf8mb4; SELECT measure_date, height, shoulder_width, chest, waist, hip, arm_length, inseam, note FROM body_measurements WHERE user_id='yangxuan' ORDER BY measure_date DESC LIMIT 1;" 输出身高/肩宽/胸围/腰围/臀围/裤长,**必须标注腰围测法**:`waist` 是肚脐水平实测,与裤装标注腰围尺码可能差 2-4cm,买裤时以版型说明为准。 尺寸是无单位的 cm 数(与体重不同,**不做斤/公斤换算**),不要套用上面的体重换算。