From 509ead77c6b6f7c481ffb635bd74b09cdf853c40 Mon Sep 17 00:00:00 2001 From: barry3406 Date: Thu, 9 Apr 2026 14:05:28 -0700 Subject: [PATCH] fix(mysql): treat BINARY columns as Blob in Any type mapping MySQL BINARY(size) columns report ColumnType::String with the BINARY flag set. The Any driver type conversion only checked the column type without looking at flags, so BINARY columns got mapped to AnyTypeInfoKind::Text instead of Blob. This caused UTF-8 decoding errors when reading raw binary data through AnyRow. Check ColumnFlags::BINARY for String/VarString/VarChar column types and map to Blob when set. Fixes #4132 --- sqlx-mysql/src/any.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sqlx-mysql/src/any.rs b/sqlx-mysql/src/any.rs index b0950e0b41..40cb12acf8 100644 --- a/sqlx-mysql/src/any.rs +++ b/sqlx-mysql/src/any.rs @@ -1,4 +1,4 @@ -use crate::protocol::text::ColumnType; +use crate::protocol::text::{ColumnFlags, ColumnType}; use crate::{ MySql, MySqlColumn, MySqlConnectOptions, MySqlConnection, MySqlQueryResult, MySqlRow, MySqlTransactionManager, MySqlTypeInfo, @@ -169,7 +169,11 @@ impl<'a> TryFrom<&'a MySqlTypeInfo> for AnyTypeInfo { | ColumnType::MediumBlob | ColumnType::LongBlob => AnyTypeInfoKind::Blob, ColumnType::String | ColumnType::VarString | ColumnType::VarChar => { - AnyTypeInfoKind::Text + if type_info.flags.contains(ColumnFlags::BINARY) { + AnyTypeInfoKind::Blob + } else { + AnyTypeInfoKind::Text + } } _ => { return Err(sqlx_core::Error::AnyDriverError(