From 23d04645f682dd98e704e398d86f0d8e42fb9dec Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 26 May 2026 11:22:23 +0800 Subject: [PATCH] fix: display MySQL BIT(1) columns as numeric strings instead of garbled text BIT columns arrive as raw bytes from mysql_async. Without specialized handling, byte 0x01 was treated as a valid UTF-8 control character and byte 0x00 was replaced with U+FFFD. Now BIT values are interpreted as big-endian integers, so BIT(1) correctly displays "0" or "1". --- crates/dbx-core/src/db/mysql.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/dbx-core/src/db/mysql.rs b/crates/dbx-core/src/db/mysql.rs index 029b1fdaa..083351b57 100644 --- a/crates/dbx-core/src/db/mysql.rs +++ b/crates/dbx-core/src/db/mysql.rs @@ -124,6 +124,14 @@ fn mysql_value_to_json(row: &mysql_async::Row, idx: usize) -> serde_json::Value .map(|v: Decimal| serde_json::Value::String(v.to_string())) .unwrap_or(serde_json::Value::Null); } + ColumnType::MYSQL_TYPE_BIT => { + return row_get::, _>(row, idx) + .map(|bytes| { + let val = bytes.iter().fold(0u64, |acc, &b| (acc << 8) | b as u64); + serde_json::Value::String(val.to_string()) + }) + .unwrap_or(serde_json::Value::Null); + } ColumnType::MYSQL_TYPE_TIMESTAMP | ColumnType::MYSQL_TYPE_TIMESTAMP2 | ColumnType::MYSQL_TYPE_DATETIME