mooSQL 数据库支持随笔:双族抽象之后,我们到底支持哪些库?
mooSQL 数据库支持随笔:双族抽象之后,我们到底支持哪些库?
版本对照:约 8.2 · 与仓库
DialectFactory/DataBaseType/《数据库支持清单》同步(2026-09)
写在前面
做 ORM / 数据访问层,最容易被问的一句话是:「你们支持哪些数据库?」
表面是一句产品话术,底下其实是三件事叠在一起:
- 方言能不能把 SQL 差异抹平(分页、参数、标识符、MERGE、Bulk……)
- 驱动 / TFM 能不能在目标框架上跑起来
- 你敢不敢对外承诺「生产可用」,而不是枚举里有个名字就算支持
mooSQL 这几年的路径,不是「每来一个库就复制一份 Dialect」,而是先把同源协议收成 Family(族),再在族上挂薄方言。这篇文章按当前代码与文档,把支持情况摊开讲一遍——给选型的人看,也给自己留个备忘。
一句话结论
覆盖面已经够宽:OLTP 三巨头 + MySQL/PG 两族衍生 + 信创 + 分析库 + 时序。短板不在「再多挂几个库」,而在支持等级分层、金仓与 Family 的关系、以及 OLAP 不能假装和 MariaDB 一样薄。
配置入口很朴素:
client.dialectFactory = new DialectFactory();
var db = new DataBase {
dbType = DataBaseType.MariaDB, // 或 MySQL / PostgreSQL / TiDB / …
DBConnectStr = "…"
};
完整矩阵以仓库文档为准:doc/design/features/方言/数据库支持清单.md。
架构怎么收:双族 + 独立方言
自 v8.2 起,同源协议产品收敛成两大 Family:
ExtDialect
├─ MySqlFamilyDialect ← MySQL wire + MySqlConnector
│ ├─ MySQLDialect
│ ├─ MariaDBDialect
│ ├─ TiDBDialect
│ └─ OBMySQLDialect (Bulk → Fallback)
│
└─ PgFamilyDialect ← PG SQL 共性;ADO 可换驱动
├─ NpgsqlDialect (Bulk → COPY)
├─ CrateDBDialect (Bulk → Fallback,勿吃 COPY)
└─ OpenGaussDialect (含 GaussDB 枚举)
其余产品是 独立方言(自有驱动与 SQL 模板),不硬塞进两族——SQL Server、Oracle、达梦、金仓、ClickHouse、DuckDB、Taos、GBase8a、SQLite、Oscar 等。
族抽象的价值很实在:同协议产品只写差分(ProviderFlags、薄 Express、覆盖 Bulk),而不是再抄一套 ADO / Option / Translator。MariaDB 就是 MySQL 族上第一个正式「有差分」的验证对象。
MySQL Family:一根线协议,多张脸
| 产品 | DataBaseType |
Bulk | 备注 |
|---|---|---|---|
| MySQL | MySQL |
族默认 MySqlFamilyBulkCopyee |
族内参考产品 |
| MariaDB | MariaDB |
族默认 | JSON Arrow 默认关、RETURNING 开 |
| TiDB | TiDB |
族默认 | 薄方言;端口常 4000 |
| OceanBase(MySQL 模式) | OceanBase |
Fallback | 覆盖 Bulk,避免错路径 |
| PolarDB for MySQL | 复用 MySQL |
族默认 | 无独立枚举 |
共性大致是:? 参数、反引号、LIMIT/OFFSET、SupportsMerge() == false、IsInsertOrUpdateSupported == true。
MariaDB 和 MySQL 早已不是换皮:JSON 存储、->/->>、INSERT…RETURNING、正则引擎都不完全对齐。所以新项目请直接用 MariaDB 枚举,别再「连的是 MariaDB 却配成 MySQL」——能跑 CRUD,不等于 JSON / RETURNING 路径安全。
PostgreSQL Family:SQL 像一家人,驱动可以换
| 产品 | DataBaseType |
Bulk | 备注 |
|---|---|---|---|
| PostgreSQL | PostgreSQL |
NpgBulkCopyee(COPY) |
族参考;Merge ✅ |
| CrateDB | CrateDB |
Fallback(必须) | 继承 Npgsql;勿吃 COPY |
| openGauss | OpenGauss |
Fallback | net8+:HuaweiCloud.GaussDB;低 TFM 可用 Npgsql 兼容 |
| GaussDB | GaussDB |
同上 | 与 openGauss 共一方言类 |
PG 族默认 Bulk 是多行 INSERT Fallback;只有 stock PostgreSQL 覆盖成 COPY。Crate / openGauss 若误吃 COPY,线上会很难看——这是文档和冒烟里反复强调的一点。
独立方言:信创、分析、时序都在这儿
| 产品 | 枚举 | 成熟度(个人划分) | 注意 |
|---|---|---|---|
| SQL Server | MSSQL |
生产级 | Merge ✅;分页常走 ROW_NUMBER |
| Oracle | Oracle |
生产级 | Merge ✅ |
| 达梦 | DM |
生产级 | 信创主力;有独立适配文档与冒烟 |
| 人大金仓 | KingBaseR3 / R6 |
可用 | 非 net451;PG 兼容模式;尚未挂入 PgFamily |
| SQLite | SQLite |
生产级 | Ext LINQ 测试基线常驻 |
| DuckDB | DuckDB |
可用 | 仅 net6+ |
| ClickHouse | ClickHouse |
可用 | 仅 net6+;OLAP |
| TDengine | Taos |
专项 | 时序场景;部分 ADO 能力不支持 |
| GBase8a | GBase8a |
专项 | MySQL 协议相近,但是独立方言 |
| Oscar | Oscar |
专项 | 南大通用;Merge ✅ |
Bulk 速查(踩坑用)
| 路径 | 默认 / 覆盖 |
|---|---|
| MySQL Family | 默认 MySqlFamilyBulkCopyee;OB 覆盖 Fallback |
| PG Family | 默认 Fallback;仅 PostgreSQL 覆盖 COPY;Crate 必须 Fallback |
| 独立方言 | 各自原生 BulkCopyee,或 Fallback |
批量导入若「在 A 库很快、换 B 库突然变慢或报错」,先看是不是吃了错误的 Bulk 实现,而不是先怀疑业务 SQL。
我怎么给业务侧做选型(个人口径)
按场景分层承诺,比「全支持」诚实得多:
| 等级 | 库 |
|---|---|
| 生产级 | SQL Server、Oracle、MySQL / MariaDB、PostgreSQL、达梦、SQLite |
| 可用 | TiDB、OceanBase(MySQL)、Crate、openGauss/GaussDB、金仓、DuckDB、ClickHouse |
| 专项 | Taos、GBase8a、Oscar |
| 占位 | Access、DB2、Informix、UX、OceanBaseOracle |
速记:
- OLTP:MSSQL / Oracle / MySQL·MariaDB / PostgreSQL
- 信创:达梦优先;金仓、openGauss 次之(先确认目标 TFM)
- 分析 / 嵌入式分析:ClickHouse、DuckDB(需要 .NET 6+)
- 时序:Taos,按专项接入,不要当通用 OLTP
- 云 MySQL / PolarDB for MySQL:直接用
MySQL即可;无差分需求就别硬造枚举
MERGE:MySQL 族整体不走原生 MERGE(SupportsMerge() == false),插入冲突更吃 InsertOrUpdate / 业务侧策略;SQL Server、Oracle、PG 族、达梦、金仓、DuckDB、Oscar 等则 SupportsMerge() == true——写跨库 DML 时先问方言,再写「一套 SQL 打天下」。
写在后面
mooSQL 的定位一直偏「熟悉 SQL 的人用的工具」:方言抹平差异,但不假装所有库是同一个引擎。双族抽象落地之后,衍生库的边际成本下降了,也更容易诚实地区分「协议兼容」和「产品兼容」。
若你正在选型:先看 [数据库支持清单]( https://gitee.com/ …/doc/design/features/方言/数据库支持清单.md)(以你仓库路径为准),再看目标 TFM 是否注册了对应方言,最后用业务里的分页 / Bulk / MERGE / JSON 各跑一条冒烟——这比任何徽章都管用。
有实际踩坑(尤其是金仓 Bulk、openGauss 驱动切换、MariaDB JSON 运算符)欢迎留言对一对,文档和冒烟可以继续补。

浙公网安备 33010602011771号