diff --git a/src/NHibernate/AdoNet/MySqlDbDataReader.cs b/src/NHibernate/AdoNet/MySqlDbDataReader.cs
new file mode 100644
index 0000000000..6033b1cca3
--- /dev/null
+++ b/src/NHibernate/AdoNet/MySqlDbDataReader.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Data.Common;
+using System.Globalization;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace NHibernate.AdoNet
+{
+ public class MySqlDbDataReader : DbDataReaderWrapper
+ {
+ public MySqlDbDataReader(DbDataReader reader) : base(reader) { }
+
+ // MySql driver has a bug that incorrectly uses the CurrentCulture to parse strings.
+ public override float GetFloat(int ordinal)
+ {
+ var value = DataReader[ordinal];
+
+ return value switch
+ {
+ string => Convert.ToSingle(value, CultureInfo.InvariantCulture),
+ _ => (float) value
+ };
+ }
+
+ public override double GetDouble(int ordinal)
+ {
+ var value = DataReader[ordinal];
+
+ return value switch
+ {
+ string => Convert.ToDouble(value, CultureInfo.InvariantCulture),
+ _ => (double) value
+ };
+ }
+
+ public override decimal GetDecimal(int ordinal)
+ {
+ var value = DataReader[ordinal];
+
+ return value switch
+ {
+ string => Convert.ToDecimal(value, CultureInfo.InvariantCulture),
+ _ => (decimal) value
+ };
+ }
+ }
+}
diff --git a/src/NHibernate/Async/Driver/MySqlDataDriver.cs b/src/NHibernate/Async/Driver/MySqlDataDriver.cs
new file mode 100644
index 0000000000..79af11a3ca
--- /dev/null
+++ b/src/NHibernate/Async/Driver/MySqlDataDriver.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by AsyncGenerator.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+
+using System;
+using System.Data.Common;
+using NHibernate.AdoNet;
+
+namespace NHibernate.Driver
+{
+ using System.Threading.Tasks;
+ using System.Threading;
+ public partial class MySqlDataDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider
+ {
+
+ public override async Task ExecuteReaderAsync(DbCommand command, CancellationToken cancellationToken)
+ {
+ cancellationToken.ThrowIfCancellationRequested();
+ var reader = await (command.ExecuteReaderAsync(cancellationToken)).ConfigureAwait(false);
+
+ return new MySqlDbDataReader(reader);
+ }
+ }
+}
diff --git a/src/NHibernate/Driver/MySqlDataDriver.cs b/src/NHibernate/Driver/MySqlDataDriver.cs
index efbe9675f9..418f711498 100644
--- a/src/NHibernate/Driver/MySqlDataDriver.cs
+++ b/src/NHibernate/Driver/MySqlDataDriver.cs
@@ -1,4 +1,5 @@
using System;
+using System.Data.Common;
using NHibernate.AdoNet;
namespace NHibernate.Driver
@@ -17,7 +18,7 @@ namespace NHibernate.Driver
/// for any updates and/or documentation regarding MySQL.
///
///
- public class MySqlDataDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider
+ public partial class MySqlDataDriver : ReflectionBasedDriver, IEmbeddedBatcherFactoryProvider
{
///
/// Initializes a new instance of the class.
@@ -79,6 +80,13 @@ public override IResultSetsCommand GetResultSetsCommand(Engine.ISessionImplement
///
public override DateTime MinDate => new DateTime(1000, 1, 1);
+ public override DbDataReader ExecuteReader(DbCommand command)
+ {
+ var reader = command.ExecuteReader();
+
+ return new MySqlDbDataReader(reader);
+ }
+
System.Type IEmbeddedBatcherFactoryProvider.BatcherFactoryClass => typeof(MySqlClientBatchingBatcherFactory);
}
}