Skip to content

Fix:兼容 ShardingSphere Proxy 的 BINARY/VARBINARY Hex 查看 - #6444

Merged
t8y2 merged 1 commit into
t8y2:mainfrom
zipg:codex/issue-5873-sharding-proxy
Aug 17, 2026
Merged

Fix:兼容 ShardingSphere Proxy 的 BINARY/VARBINARY Hex 查看#6444
t8y2 merged 1 commit into
t8y2:mainfrom
zipg:codex/issue-5873-sharding-proxy

Conversation

@zipg

@zipg zipg commented Aug 17, 2026

Copy link
Copy Markdown
Contributor

Fixes #5873

问题原因

PR #5872 已修复原生 MySQL 返回的 BINARY/VARBINARY,但 ShardingSphere Proxy 5.3.0 会改写查询结果元数据:

  • BINARY 被返回为 CHARVARBINARY 被返回为 VARCHAR
  • 字符集从二进制字符集 63 改为 utf8mb4 字符集 45
  • 原始二进制列仍保留 BINARY_FLAG,并带有代理添加的 UNSIGNED_FLAG
  • SHOW FULL COLUMNS 返回的表结构类型仍然正确

DBX 此前只根据结果元数据的字符集 63 判断二进制列,因此代理查询结果被当成文本解码,Hex 查看器无法获得原始字节。

修复内容

  • 兼容 ShardingSphere Proxy 的二进制字符串标志组合,恢复 binary/varbinary 结果类型
  • 查询值和大值预览统一使用该判断,保留尾部 00、不可打印字节和空二进制值
  • 普通 CHAR/VARCHAR 以及使用二进制排序规则的文本仍按文本处理
  • 增加代理元数据单测和可选的 ShardingSphere 真实连接回归测试

验证

  • ShardingSphere Proxy 5.3.0 真实环境:通过
  • 开发客户端:binary(8) / varbinary(32) 列头正确;0x31353030313000000xdeadbeef0x 均可查看
  • cargo test -p dbx-core mysql_shardingsphere --lib:2/2 通过
  • cargo test -p dbx-core mysql_binary --lib:5/5 通过
  • ShardingSphere 真实连接回归:1/1 通过
  • packages/app-tests/binaryCellDownload.test.ts:16/16 通过
  • pnpm typecheckcargo fmt --all -- --check、相关 Clippy:通过

@github-actions github-actions Bot added area/core Shared DBX core runtime bug Something isn't working db/mysql Database: MySQL labels Aug 17, 2026
@t8y2
t8y2 merged commit 5087460 into t8y2:main Aug 17, 2026
15 checks passed
@t8y2

t8y2 commented Aug 17, 2026

Copy link
Copy Markdown
Owner

Thanks for the contribution! Merged in 5087460, will be released in the next version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/core Shared DBX core runtime bug Something isn't working db/mysql Database: MySQL

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] 连接sharding proxy代理库时查看binary类型字段的单元格详情,选择Hex查看器无法显示数据

2 participants