From c043fd6027bbe107194b900b9431ea06b8f8ea65 Mon Sep 17 00:00:00 2001 From: Jinyang Li <410670140@qq.com> Date: Thu, 5 Feb 2026 03:07:54 -0500 Subject: [PATCH] fix(mysql): use lenient flag comparison for ENUM types MySQL-compatible databases like TiDB may return ENUM columns with additional flags like NOT_NULL or NO_DEFAULT_VALUE. The previous exact flag comparison caused type mismatches even though both sides were valid ENUM types. This change makes ENUM comparison check only that both types have the ENUM flag set, ignoring other flags that don't affect type compatibility. Fixes #3750 Refs #1241 --- sqlx-mysql/src/type_info.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sqlx-mysql/src/type_info.rs b/sqlx-mysql/src/type_info.rs index a80b233fc9..9de0b41307 100644 --- a/sqlx-mysql/src/type_info.rs +++ b/sqlx-mysql/src/type_info.rs @@ -106,6 +106,13 @@ impl PartialEq for MySqlTypeInfo { | ColumnType::String | ColumnType::VarString | ColumnType::Enum => { + // For ENUM types, only require both have ENUM flag set. + // MySQL-compatible databases like TiDB may return additional flags + // like NOT_NULL that don't affect type compatibility. + if self.flags.contains(ColumnFlags::ENUM) && other.flags.contains(ColumnFlags::ENUM) + { + return true; + } return self.flags == other.flags; } _ => {}