胡飞
786c6454cb
fix(db): MySQL 结果列字符集未知时按 UTF-8 兜底解码
现象:连接某些 MySQL 兼容实现/代理时,结果列元数据的 character_set 字段为 0
(日志里 collation_id=0、charset=unknown、cause=charset-decode),而
decode_character 在拿不到 decoder 时一律降级为 DbValue::Binary,文本列因此在网格里
显示成「二进制 · N B」;元数据查询与自定义 SQL 不走 schema 纠偏,同样受影响。
样本显示这些字节是合法 UTF-8 且不含控制字符,即内容本身是文本。
修复:字符集未知(collation 0 / 未映射)时用严格 UTF-8 兜底解码,与
decode_untyped_bytes 对无类型字节的判定保持一致(合法 UTF-8 且无控制字符)。
非法 UTF-8 或含控制字符的字节仍保留二进制 sidecar;wire 已声明 collation 63 的
字节列仍走 wire-binary 分支;已声明字符集的列行为不变。
代价:字符集未知的服务端上,内容是「可打印 ASCII」的真二进制列会显示为文本;
这类字节此前显示为二进制,属显示层面的取舍,若需严格区分可按 BINARY_FLAG 收窄。
验证:cargo test -p db --lib 1314 passed;新增 3 个 codec 回归测试(collation 0 与
未映射 collation 的文本解为 Text,控制字符与非法 UTF-8 仍为 Binary);
clippy -p db --all-targets 对本文件无告警。
2026-09-21 16:18:29 +08:00
..
2026-09-20 14:52:00 +08:00
2026-09-17 16:40:57 +08:00
2026-09-14 18:06:38 +08:00
2026-08-31 23:02:35 +08:00
2026-09-08 21:07:52 +08:00
2026-09-21 10:43:16 +08:00
2026-09-21 16:18:29 +08:00
2026-09-21 10:43:16 +08:00
2026-09-11 18:21:36 +08:00
2026-09-11 17:41:15 +08:00
2026-09-14 18:06:24 +08:00
2026-09-18 09:45:33 +08:00
2026-09-02 15:05:12 +08:00
2026-09-02 15:05:12 +08:00
2026-08-31 23:02:35 +08:00
2026-09-14 10:23:38 +08:00
2026-09-15 17:26:11 +08:00
2026-09-02 15:05:12 +08:00
2026-09-20 20:15:25 +08:00
2026-09-17 11:24:04 +08:00
2026-09-15 22:31:36 +08:00
2026-09-19 11:31:36 +08:00
2026-09-14 18:06:24 +08:00
2026-09-14 18:06:24 +08:00
2026-08-31 23:02:35 +08:00
2026-09-17 15:35:50 +08:00
2026-09-14 18:06:24 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-09-14 18:06:24 +08:00
2026-08-31 23:02:35 +08:00
2026-09-20 14:52:00 +08:00
2026-09-14 18:06:24 +08:00
2026-09-18 18:00:09 +08:00
2026-09-17 13:15:08 +08:00
2026-09-14 18:06:38 +08:00
2026-09-14 18:06:24 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-09-14 18:06:24 +08:00
2026-09-12 08:04:12 +08:00
2026-09-12 00:07:27 +08:00
2026-09-15 16:12:56 +08:00
2026-09-15 16:12:56 +08:00
2026-09-14 18:06:38 +08:00
2026-09-17 13:53:25 +08:00
2026-09-16 10:05:47 +08:00
2026-09-18 18:00:09 +08:00
2026-09-18 18:00:27 +08:00
2026-09-09 23:24:51 +08:00
2026-09-20 19:14:37 +08:00
2026-09-20 19:14:37 +08:00
2026-08-31 23:02:35 +08:00
2026-09-18 12:54:56 +08:00
2026-09-19 12:55:35 +08:00
2026-09-19 11:31:36 +08:00
2026-08-31 23:02:35 +08:00