![]() |
VOOZH | about |
dotnet add package NewLife.MySql --version 1.2.2026.601
NuGet\Install-Package NewLife.MySql -Version 1.2.2026.601
<PackageReference Include="NewLife.MySql" Version="1.2.2026.601" />
<PackageVersion Include="NewLife.MySql" Version="1.2.2026.601" />Directory.Packages.props
<PackageReference Include="NewLife.MySql" />Project file
paket add NewLife.MySql --version 1.2.2026.601
#r "nuget: NewLife.MySql, 1.2.2026.601"
#:package NewLife.MySql@1.2.2026.601
#addin nuget:?package=NewLife.MySql&version=1.2.2026.601Install as a Cake Addin
#tool nuget:?package=NewLife.MySql&version=1.2.2026.601Install as a Cake Tool
NewLife.MySql 是新生命团队出品的纯国产 MySQL 客户端驱动,基于 ADO.NET 标准接口,直接通过 TCP 实现 MySQL 协议层(Protocol Version 10)。仅依赖 NewLife.Core,零第三方依赖、全链路真异步、MIT 协议商用无忧。
独创的管道化批量执行(Pipeline)在万级行批量写入场景下领先竞品 2×~3×,是大数据批量操作、信创国产化替代的理想选择。
| 目标 | 说明 |
|---|---|
| 轻量极简 | 只做 ADO.NET 标准的增删改查、事务、参数化查询、存储过程和批量操作 |
| 高性能 | 零额外内存分配(ArrayPool / OwnerPacket)、真异步 IO、管道化批量执行 |
| 纯国产 | 核心代码完全自主可控,无 GPL 许可风险,适合信创环境 |
| 大数据友好 | 字典参数集 / 数组绑定 / 管道化 / 多行 VALUES / DbBatch,覆盖万级到百万级行 |
| 广泛兼容 | net45 ~ net10 全版本,MySQL 5.x ~ 9.0+,兼容 OceanBase / TiDB |
| 功能 | 说明 |
|---|---|
| 连接管理 | MySQL 5.x / 8.0 / 9.0+,mysql_native_password + caching_sha2_password 双认证 |
| 查询执行 | ExecuteReader / ExecuteScalar / ExecuteNonQuery,完整 ADO.NET 接口 |
| 参数化查询 | 客户端参数替换,@参数名 语法,自动转义防注入 |
| 预编译语句 | Prepare() 走 COM_STMT_PREPARE 二进制协议,可选 UseServerPrepare 全局开关 |
| 批量操作 | ExecuteBatch / ExecuteArrayBatch / 管道化 / 多行 VALUES / DbBatch |
| 管道化执行 | Pipeline=true 批量发送后批量接收,网络延迟仅一次,万级行性能提升 3~10× |
| 事务支持 | BeginTransaction / Commit / Rollback,四种隔离级别,自动回滚 |
| 存储过程 | CommandType.StoredProcedure,支持 IN/OUT 参数 |
| SSL/TLS | SslMode=Preferred/Required,支持 TLS 1.2/1.3 |
| 连接池 | 默认开启,按连接字符串分池,自动健康检查与回收 |
| 异步方法 | 全链路 async/await,OpenAsync / ExecuteReaderAsync / ReadAsync 等 |
| Schema 查询 | Tables / Columns / Indexes / Databases 等元数据 |
| DbBatch | .NET 6+ ADO.NET 标准批量 API |
| EF Core | 通过 NewLife.MySql.EntityFrameworkCore 独立包支持 |
| XCode 集成 | 通过 MySqlClientFactory 自动注册,无缝对接 XCode ORM |
独创的管道化模式,基于 COM_STMT_PREPARE + COM_STMT_EXECUTE 二进制协议:
实测数据(.NET 10 + MySQL 8.0.26 本机,管道化+事务 vs 逐行基线):
| 场景 | 逐行基线 | 管道化+事务 | 加速比 |
|---|---|---|---|
| 1,000 行 INSERT | 437ms | 54ms | 8.1× |
| 10,000 行 INSERT | 3,150ms | 680ms | 4.6× |
| 10,000 行 UPDATE | 3,469ms | 757ms | 4.6× |
| 10,000 行 DELETE | 3,351ms | 673ms | 5.0× |
三驱动对比(10,000 行批量操作):
| 操作 | NewLife Pipeline(tx) | MySql.Data Batch(tx) | MySqlConnector Batch(tx) | NewLife 加速比 |
|---|---|---|---|---|
| INSERT | 899ms | 1,927ms | 1,906ms | 2.1× |
| UPDATE | 710ms | 2,265ms | 2,041ms | 2.9× |
| DELETE | 661ms | 1,961ms | 1,767ms | 2.7× |
本机内网已有 4×~8× 加速,跨机房场景收益更大。详细数据参见 。
| 方案 | API | 适用场景 |
|---|---|---|
| 字典参数集 | ExecuteBatch |
动态参数,参数来自集合 |
| 数组绑定 | ExecuteArrayBatch |
大批量 DML,Oracle 风格 |
| 管道化 | Pipeline=true |
万级/十万级行,跨机房 |
| 多行 VALUES | 拼接 SQL | 纯 INSERT 批量 |
| DbBatch (.NET 6+) | CreateBatch |
不同 SQL 混合批量 |
仅依赖 NewLife.Core(同为 NewLife 团队出品),无 GPL 许可风险,MIT 协议商用无忧,适合信创环境和安全审计严格的场景。
ArrayPool<T> + OwnerPacket 零额外分配Pool.StringBuilder / Pool.MemoryStream 全面池化async/await,无 sync-over-async 反模式net45 / net461 / netstandard2.0 / netstandard2.1 / net6.0 / net10.0mysql_native_password + caching_sha2_password| 功能 | NewLife.MySql | MySqlConnector | MySql.Data (Oracle) |
|---|---|---|---|
| 许可协议 | MIT | MIT | GPL (商用付费) |
| 国产自主 | ✅ | ❌ | ❌ |
| 第三方依赖 | 无 | 无 | 无 |
| 真异步 IO | ✅ | ✅ | ❌ |
| 管道化批量执行 | ✅ 独创 | ❌ | ❌ |
| 数组绑定批量 | ✅ | ❌ | ❌ |
| 字典参数集批量 | ✅ | ❌ | ❌ |
| DbBatch (.NET 6+) | ✅ | ✅ | ❌ |
| DataAdapter | ✅ | ❌ | ✅ |
| EF Core | ✅ | ✅ (Pomelo) | ✅ |
| XCode ORM 集成 | ✅ | ❌ | ❌ |
| 多目标框架 | net45~net10 | netstandard2.0+ | net462+ |
| OceanBase / TiDB | ✅ 自动检测 | ❌ | ❌ |
完整对比和架构分析参见 。
dotnet add package NewLife.MySql
<PackageReference Include="NewLife.MySql" Version="1.0.*" />
Server=localhost;Port=3306;Database=mydb;User Id=root;Password=pass;
| 参数 | 别名 | 默认值 | 说明 |
|---|---|---|---|
| Server | DataSource, Data Source | - | 服务器地址 |
| Port | - | 3306 | 端口号 |
| Database | - | - | 数据库名 |
| UserID | Uid, User Id, User | - | 用户名 |
| Password | Pass, Pwd | - | 密码 |
| ConnectionTimeout | Connection Timeout | 15 | 连接超时(秒) |
| CommandTimeout | Default Command Timeout | 30 | 命令超时(秒) |
| SslMode | Ssl Mode | None | SSL 模式(None/Preferred/Required) |
| UseServerPrepare | Use Server Prepare | false | 全局服务端预编译开关 |
| Pipeline | Pipelining | false | 管道化执行开关 |
using var conn = new MySqlConnection("Server=localhost;Database=mydb;User Id=root;Password=pass;");
conn.Open();
// using 结束时自动关闭并归还连接池
using var conn = new MySqlConnection(connStr);
conn.Open();
using var cmd = new MySqlCommand(conn, "SELECT id, name, age FROM users WHERE age > 18");
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
var id = reader.GetInt64(0);
var name = reader.GetString(1);
var age = reader.GetInt64(2);
Console.WriteLine($"{id}: {name}, {age}");
}
using var cmd = new MySqlCommand(conn, "SELECT COUNT(*) FROM users");
var count = cmd.ExecuteScalar();
using var cmd = new MySqlCommand(conn, "INSERT INTO users(name, age) VALUES('Tom', 25)");
var affectedRows = cmd.ExecuteNonQuery();
// 快捷方式
var rows = conn.ExecuteNonQuery("DELETE FROM logs WHERE created < '2024-01-01'");
使用 @参数名 语法绑定参数,自动转义防注入:
using var cmd = new MySqlCommand(conn, "SELECT * FROM users WHERE name = @name AND age > @age");
cmd.Parameters.AddWithValue("name", "Tom");
cmd.Parameters.AddWithValue("age", 18);
using var reader = cmd.ExecuteReader();
while (reader.Read())
{
Console.WriteLine(reader.GetString(0));
}
// 参数化插入
using var cmd = new MySqlCommand(conn, "INSERT INTO users(name, age, created) VALUES(@name, @age, @dt)");
cmd.Parameters.AddWithValue("name", "Alice");
cmd.Parameters.AddWithValue("age", 30);
cmd.Parameters.AddWithValue("dt", DateTime.Now);
cmd.ExecuteNonQuery();
// NULL 值传递
cmd.Parameters.AddWithValue("email", DBNull.Value);
支持的参数类型:
| .NET 类型 | SQL 字面量示例 |
|---|---|
String |
'hello'(自动转义特殊字符) |
Int32 / Int64 等数字 |
42 |
Boolean |
1 或 0 |
DateTime |
'2025-07-01 12:30:00' |
Byte[] |
X'CAFE' |
Guid |
'01234567-89ab-cdef-...' |
Enum |
转为数字 |
null / DBNull.Value |
NULL |
using var conn = new MySqlConnection(connStr);
conn.Open();
using var tr = conn.BeginTransaction();
try
{
conn.ExecuteNonQuery("INSERT INTO orders(product, qty) VALUES('Widget', 10)");
conn.ExecuteNonQuery("UPDATE inventory SET qty = qty - 10 WHERE product = 'Widget'");
tr.Commit();
}
catch
{
tr.Rollback();
throw;
}
支持四种隔离级别:ReadUncommitted / ReadCommitted / RepeatableRead(默认)/ Serializable
using var tr = conn.BeginTransaction(IsolationLevel.ReadCommitted);
事务 Dispose 时如果未提交也未回滚,会自动执行回滚。
using var cmd = new MySqlCommand { Connection = conn, CommandType = CommandType.StoredProcedure };
cmd.CommandText = "my_proc";
cmd.Parameters.AddWithValue("p_id", 1);
var outParam = new MySqlParameter { ParameterName = "p_result", Direction = ParameterDirection.Output };
cmd.Parameters.Add(outParam);
cmd.ExecuteNonQuery();
var result = outParam.Value; // 输出参数值
通过 Prepare() 在服务端预编译 SQL,后续执行走二进制协议:
using var cmd = new MySqlCommand(conn, "INSERT INTO users(name, age) VALUES(@name, @age)");
cmd.Parameters.AddWithValue("name", "Tom");
cmd.Parameters.AddWithValue("age", 25);
cmd.Prepare(); // 服务端预编译
cmd.ExecuteNonQuery(); // 第一次执行
// 修改参数后再次执行(无需重新编译)
cmd.Parameters[0].Value = "Jerry";
cmd.Parameters[1].Value = 30;
cmd.ExecuteNonQuery();
也可通过连接字符串全局启用,所有参数化查询自动走二进制协议:
UseServerPrepare=true;
同一 SQL 绑定多组参数执行,内部自动预编译:
using var cmd = new MySqlCommand(conn, "INSERT INTO users(name, age) VALUES(@name, @age)");
cmd.Parameters.AddWithValue("name", "");
cmd.Parameters.AddWithValue("age", 0);
var paramSets = new List<IDictionary<String, Object?>>
{
new Dictionary<String, Object?> { ["name"] = "Alice", ["age"] = 25 },
new Dictionary<String, Object?> { ["name"] = "Bob", ["age"] = 30 },
new Dictionary<String, Object?> { ["name"] = "Charlie", ["age"] = 22 },
};
var totalAffected = cmd.ExecuteBatch(paramSets);
// 或 await cmd.ExecuteBatchAsync(paramSets);
参数值设为数组,指定执行次数:
using var cmd = new MySqlCommand(conn, "INSERT INTO users(name, age) VALUES(@name, @age)");
cmd.Parameters.AddWithValue("name", new[] { "Alice", "Bob", "Charlie" });
cmd.Parameters.AddWithValue("age", new[] { 25, 30, 22 });
var totalAffected = cmd.ExecuteArrayBatch(3);
// 或 await cmd.ExecuteArrayBatchAsync(3);
连接字符串开启 Pipeline=true,批量发送后批量接收,网络往返仅一次:
var connStr = "Server=localhost;Database=mydb;User Id=root;Password=pass;Pipeline=true;";
using var conn = new MySqlConnection(connStr);
conn.Open();
using var cmd = new MySqlCommand(conn, "UPDATE users SET age=@age WHERE name=@name");
cmd.Parameters.AddWithValue("age", agesArray); // Int32[10000]
cmd.Parameters.AddWithValue("name", namesArray); // String[10000]
var totalAffected = cmd.ExecuteArrayBatch(10000);
管道化对 INSERT / UPDATE / DELETE 均有效,搭配字典参数集或数组绑定使用。网络延迟越高(如跨机房),收益越大。
var sql = "INSERT INTO users(name, age) VALUES('Alice', 25), ('Bob', 30), ('Charlie', 22)";
conn.ExecuteNonQuery(sql);
var batch = conn.CreateBatch();
batch.BatchCommands.Add(new MySqlBatchCommand("INSERT INTO users(name, age) VALUES('X1', 10)"));
batch.BatchCommands.Add(new MySqlBatchCommand("INSERT INTO users(name, age) VALUES('X2', 20)"));
batch.BatchCommands.Add(new MySqlBatchCommand("UPDATE users SET age = age + 1 WHERE name = 'X1'"));
using var reader = batch.ExecuteReader();
NewLife.MySql.EntityFrameworkCore 包提供 EF Core 数据库提供程序,支持 .NET 6 / .NET 8 / .NET 10。
dotnet add package NewLife.MySql.EntityFrameworkCore
public class AppDbContext : DbContext
{
public DbSet<User> Users { get; set; } = null!;
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<User>(entity =>
{
entity.ToTable("users");
entity.HasKey(e => e.Id);
entity.Property(e => e.Name).HasMaxLength(100).IsRequired();
});
}
}
var options = new DbContextOptionsBuilder<AppDbContext>()
.UseMySql("Server=localhost;Database=mydb;User Id=root;Password=pass;")
.Options;
using var context = new AppDbContext(options);
已支持功能:
| 功能 | 说明 |
|---|---|
| 类型映射 | Int / Long / String / DateTime / Decimal / Guid / Boolean / Byte[] |
| 查询翻译 | LINQ → MySQL 语法(反引号、LIMIT/OFFSET) |
| 方法翻译 | Contains / StartsWith / EndsWith / ToUpper / ToLower / Trim / Replace / Substring / Length |
| 成员翻译 | DateTime.Year / Month / Day / Hour / Minute / Second |
| 迁移支持 | CreateTable / AlterColumn / AddColumn / DropColumn / RenameTable / CreateIndex / DropIndex |
| 值生成策略 | AUTO_INCREMENT 自增主键 |
// 服务器支持则加密,不支持则明文
var connStr = "Server=localhost;Database=mydb;User Id=root;Password=pass;SslMode=Preferred;";
// 必须加密,不支持则抛异常
var connStr2 = "Server=localhost;Database=mydb;User Id=root;Password=pass;SslMode=Required;";
| SslMode | 行为 |
|---|---|
None / Disabled |
不使用 SSL(默认) |
Preferred |
优先加密,不支持则明文 |
Required |
强制加密 |
var databases = conn.GetSchema("Databases"); // 数据库列表
var tables = conn.GetSchema("Tables"); // 表列表
var columns = conn.GetSchema("Columns"); // 列信息
var indexes = conn.GetSchema("Indexes"); // 索引信息
所有核心操作均支持异步版本:
using var conn = new MySqlConnection(connStr);
await conn.OpenAsync();
using var cmd = new MySqlCommand(conn, "SELECT * FROM users");
using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
Console.WriteLine(reader.GetString(0));
}
连接池默认启用,无需额外配置。每个唯一连接字符串对应独立连接池。
通过 MySqlClientFactory 自动注册为 XCode 的 MySQL 驱动:
using XCode.DataAccessLayer;
DAL.AddConnStr("mysql", "Server=localhost;Database=mydb;User Id=root;Password=pass;", null, "MySql");
var dal = DAL.Create("mysql");
var tables = dal.Tables;
using var conn = new MySqlConnection("Server=localhost;Database=db1;...");
conn.Open();
conn.ChangeDatabase("db2"); // 内部 Close + Reopen
⚠️ 不支持在事务中途切换(事务会丢失),推荐为每个数据库创建独立连接。
await conn.Client.SetDatabaseAsync("information_schema"); // COM_INIT_DB
不关闭连接,仅切换服务端当前数据库,适合临时查询场景。
驱动根据握手包版本字符串自动检测数据库类型,连接方式与 MySQL 完全相同:
// OceanBase
var connStr = "Server=oceanbase-host;Port=2881;Database=test;User Id=root;Password=pass;";
using var conn = new MySqlConnection(connStr);
conn.Open();
Console.WriteLine($"数据库类型: {conn.DatabaseType}"); // OceanBase
// TiDB
var connStr2 = "Server=tidb-host;Port=4000;Database=test;User Id=root;Password=pass;";
using var conn2 = new MySqlConnection(connStr2);
conn2.Open();
Console.WriteLine($"数据库类型: {conn2.DatabaseType}"); // TiDB
基础 SQL、事务、参数化查询、批量操作均兼容。
| 框架 | 说明 |
|---|---|
net45 / net461 |
.NET Framework,兼容老项目 |
netstandard2.0 / netstandard2.1 |
跨平台兼容,支持异步 Dispose |
net6.0 |
额外支持 DbBatch API |
net10.0 |
最新 .NET,最优性能 |
| 文档 | 说明 |
|---|---|
| 功能需求、验收条件、迭代计划 | |
| 架构概览、协议实现、技术选型、设计决策、驱动对比 | |
| 批量操作基准性能测试详细数据 |
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 net5.0 was computed. net5.0-windows net5.0-windows was computed. net6.0 net6.0 is compatible. net6.0-android net6.0-android was computed. net6.0-ios net6.0-ios was computed. net6.0-maccatalyst net6.0-maccatalyst was computed. net6.0-macos net6.0-macos was computed. net6.0-tvos net6.0-tvos was computed. net6.0-windows net6.0-windows was computed. net7.0 net7.0 was computed. net7.0-android net7.0-android was computed. net7.0-ios net7.0-ios was computed. net7.0-maccatalyst net7.0-maccatalyst was computed. net7.0-macos net7.0-macos was computed. net7.0-tvos net7.0-tvos was computed. net7.0-windows net7.0-windows was computed. net8.0 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 was computed. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 netcoreapp2.0 was computed. netcoreapp2.1 netcoreapp2.1 was computed. netcoreapp2.2 netcoreapp2.2 was computed. netcoreapp3.0 netcoreapp3.0 was computed. netcoreapp3.1 netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 netstandard2.0 is compatible. netstandard2.1 netstandard2.1 is compatible. |
| .NET Framework | net45 net45 is compatible. net451 net451 was computed. net452 net452 was computed. net46 net46 was computed. net461 net461 is compatible. net462 net462 was computed. net463 net463 was computed. net47 net47 was computed. net471 net471 was computed. net472 net472 was computed. net48 net48 was computed. net481 net481 was computed. |
| MonoAndroid | monoandroid monoandroid was computed. |
| MonoMac | monomac monomac was computed. |
| MonoTouch | monotouch monotouch was computed. |
| Tizen | tizen40 tizen40 was computed. tizen60 tizen60 was computed. |
| Xamarin.iOS | xamarinios xamarinios was computed. |
| Xamarin.Mac | xamarinmac xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos xamarinwatchos was computed. |
Showing the top 5 NuGet packages that depend on NewLife.MySql:
| Package | Downloads |
|---|---|
|
Duzhi.Common
修复Text.Json大小写敏感问题 |
|
|
AntWeb
AntJob 可视化管理平台,提供任务调度、监控、日志查询和集群管理功能。 |
|
|
XCode.MySql
为 XCode 提供 MySQL 数据库驱动接入与方言支持,支持自动建模迁移、缓存协同与高性能数据访问。 |
|
|
NewLife.ChatAI
集对话前端、统一 AI 网关、Agent 平台于一身的完整 AI 应用。支持多轮对话、流式输出、函数调用、图像生成、会话管理与使用量统计 |
|
|
NewLife.MySql.EntityFrameworkCore
基于NewLife.MySql的Entity Framework Core数据库提供程序,纯国产零依赖,支持管道化批量操作和DbBatch |
Showing the top 2 popular GitHub repositories that depend on NewLife.MySql:
| Repository | Stars |
|---|---|
|
NewLifeX/AntJob
高吞吐 .NET 分布式任务与实时数据调度平台:时间/数据/消息/Cron/SQL/脚本切片,自动重试与弹性扩缩,回溯补算 + Web 控制台。High‑throughput .NET distributed job & real‑time scheduler with fine‑grained slicing, retries, elastic scaling & web console.
|
|
|
NewLifeX/NewLife.XCode
20 年演进的 .NET 高性能数据中间件,聚焦极致性能、海量数据、自动建模/迁移、多级缓存、自动分表分库,支持 MySQL/SQLite/SqlServer/Oracle/Postgresql/达梦 等
|
| Version | Downloads | Last Updated |
|---|---|---|
| 1.2.2026.601 | 340 | 6/1/2026 |
| 1.2.2026.601-beta1342 | 118 | 6/1/2026 |
| 1.1.2026.509-beta0405 | 127 | 5/9/2026 |
| 1.1.2026.508-beta1532 | 102 | 5/8/2026 |
| 1.1.2026.501 | 1,293 | 5/1/2026 |
| 1.1.2026.501-beta0529 | 96 | 5/1/2026 |
| 1.0.2026.426-beta0621 | 123 | 4/26/2026 |
| 1.0.2026.414-beta0531 | 144 | 4/14/2026 |
| 1.0.2026.412-beta0558 | 101 | 4/12/2026 |
| 1.0.2026.407-beta0615 | 108 | 4/7/2026 |
| 1.0.2026.402 | 903 | 4/2/2026 |
| 1.0.2026.402-beta0920 | 126 | 4/2/2026 |
| 1.0.2026.323-beta0553 | 140 | 3/23/2026 |
| 1.0.2026.318-beta0335 | 148 | 3/18/2026 |
| 1.0.2026.316-beta1558 | 131 | 3/16/2026 |
| 1.0.2026.310-beta1549 | 135 | 3/10/2026 |
| 1.0.2026.303-beta1403 | 141 | 3/3/2026 |
| 1.0.2026.302 | 284 | 3/2/2026 |
| 1.0.2026.302-beta0439 | 130 | 3/2/2026 |
| 1.0.2026.220-beta1458 | 134 | 2/20/2026 |
v1.2 追踪与可观测性增强;MySqlClientFactory 实现 ITracerFeature 接口并默认启用 Tracer,增强可观测性集成;MySqlPoolManager 埋点参数精简为 Server/Database,避免敏感信息泄露;SqlClient.PingAsync 调试模式下增加埋点并记录异常,便于连接问题诊断