Files
胡飞 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-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00
2026-08-31 23:02:35 +08:00