From 310468b44e9ec94e950e142c67b83c39d8736bb9 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Wed, 6 May 2026 18:54:43 +0800 Subject: [PATCH] fix(mysql): display TINYINT(1) as integer instead of boolean (#120) MySQL BOOLEAN is an alias for TINYINT(1). The sqlx driver reports it as BOOLEAN type, causing values to display as true/false. Read the value as i8 first to show the actual integer value. --- crates/dbx-core/src/db/mysql.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/dbx-core/src/db/mysql.rs b/crates/dbx-core/src/db/mysql.rs index f5d7da774..22215ec84 100644 --- a/crates/dbx-core/src/db/mysql.rs +++ b/crates/dbx-core/src/db/mysql.rs @@ -94,7 +94,12 @@ fn mysql_value_to_json(row: &MySqlRow, idx: usize, type_name: &str) -> serde_jso } if upper_type == "BOOLEAN" { - return row.try_get::(idx).map(serde_json::Value::Bool).unwrap_or(serde_json::Value::Null); + // MySQL BOOLEAN is an alias for TINYINT(1); display as integer + return row + .try_get::(idx) + .map(|v| serde_json::Value::Number((v as i64).into())) + .or_else(|_| row.try_get::(idx).map(|v| serde_json::Value::Number((v as i64).into()))) + .unwrap_or(serde_json::Value::Null); } if upper_type.contains("BIGINT") {