Skip to content

数据库连接串与驱动对比

连接串不只是“地址加密码”。它同时表达协议、拓扑入口、目标命名空间、身份认证、TLS 校验和会话行为。相似的字符串可能使用完全不同的网络协议;有些云数据库和宽列数据库则根本没有跨语言通用 URI。

示例不含真实凭证

下面的 USER、主机名、项目名和数据库名都是占位符。生产环境应通过环境变量、Secret Manager、工作负载身份或驱动属性传入凭证,不要把密码提交到仓库,也不要让它出现在日志、异常或进程参数中。

24 / 24
数据库形式 / 端口代表性模板命名空间与关键差异
PostgreSQL关系型URIPostgreSQL wire / libpq默认端口 5432postgresql://[email protected]:5432/app?sslmode=verify-fullTLS:sslmode=verify-full路径是 database;schema 在会话内选择

libpq 同时支持 URI 与 key=value;多主机、证书路径和 application_name 都可作为参数。

官方连接文档 ↗
MySQL关系型JDBCMySQL classic protocol默认端口 3306jdbc:mysql://db.example:3306/app?sslMode=VERIFY_IDENTITYTLS:sslMode=VERIFY_IDENTITY路径是 database/schema

URI 形式取决于驱动;Connector/J 还提供 loadbalance、replication 和 SRV 子协议。

官方连接文档 ↗
MariaDB关系型JDBCMariaDB/MySQL protocol默认端口 3306jdbc:mariadb://db.example:3306/app?sslMode=verify-fullTLS:sslMode=verify-full路径是 database

MariaDB Connector/J 3.x 默认只接受 jdbc:mariadb:;不要假定 MySQL 驱动参数完全相同。

官方连接文档 ↗
SQLite关系型嵌入式文件 URI / 进程内 API默认端口 —file:./data/app.db?mode=rwcTLS:不适用路径就是数据库文件;main/temp 是 schema

没有服务器、用户和网络端口;URI 参数是否启用取决于宿主绑定和编译选项。

官方连接文档 ↗
Microsoft SQL Server关系型JDBCTDS默认端口 1433jdbc:sqlserver://db.example:1433;databaseName=app;encrypt=true;trustServerCertificate=falseTLS:encrypt=true + 证书校验databaseName;schema 通常为 dbo 或用户默认值

JDBC 属性使用分号;实例名、集成认证和 Azure 身份认证是不同连接路径。

官方连接文档 ↗
Oracle Database关系型JDBCOracle Net / JDBC Thin默认端口 1521jdbc:oracle:thin:@tcps://db.example:1521/app_serviceTLS:TCPS + wallet/信任库末段通常是 service name,不是 SID

优先 service name 与 Easy Connect Plus;RAC/多主机通常需要扩展 Easy Connect 或描述符。

官方连接文档 ↗
DuckDB分析与分布式嵌入式进程内 API / JDBC默认端口 —jdbc:duckdb:./data/analytics.duckdbTLS:不适用;远程文件由扩展处理路径是本地文件;空路径创建内存库

DuckDB 不是远程数据库服务;数据库文件和进程资源属于宿主应用。

官方连接文档 ↗
ClickHouse分析与分布式JDBCHTTPS / Native TCP默认端口 8123 / 9000jdbc:clickhouse:https://db.example:8443/analyticsTLS:HTTPS 或 secure native port路径是 database

客户端可能走 HTTP 或 Native 协议,端口、压缩和负载均衡参数不能混用。

官方连接文档 ↗
TiDB分析与分布式JDBCMySQL protocol默认端口 4000jdbc:mysql://gateway.example:4000/app?sslMode=VERIFY_IDENTITYTLS:按 TiDB Cloud/自托管证书配置路径是 database

使用 MySQL 兼容驱动,但认证插件、collation 和部分会话变量需要按 TiDB 文档确认。

官方连接文档 ↗
CockroachDB分析与分布式URIPostgreSQL wire默认端口 26257postgresql://[email protected]:26257/app?sslmode=verify-fullTLS:sslmode=verify-full + CA/客户端证书路径是 database;schema 与 PostgreSQL 相近

协议兼容 PostgreSQL,但驱动/ORM 仍需验证事务重试和 CockroachDB 适配。

官方连接文档 ↗
Snowflake分析与分布式JDBCHTTPS默认端口 443jdbc:snowflake://ORG-ACCOUNT.snowflakecomputing.com/?db=APP&schema=PUBLIC&warehouse=WH&role=ROLETLS:HTTPS;不要中间人替换证书account → database → schema;warehouse 是计算资源

用户、OAuth、密钥或工作负载身份应放 Properties/安全配置,不要把密码写入 URL。

官方连接文档 ↗
BigQuery分析与分布式SDK 参数Google APIs / REST/gRPC默认端口 443project=PROJECT_ID; location=REGION; dataset=DATASETTLS:Google API HTTPS + ADC/OAuthproject → dataset → table

没有跨语言统一数据库 URI;JDBC/ODBC URL 由具体驱动定义,应用通常使用 ADC 与 SDK 配置。

官方连接文档 ↗
MongoDBNoSQLURIMongoDB wire / DNS SRV默认端口 27017mongodb+srv://[email protected]/app?retryWrites=true&w=majorityTLS:SRV 默认启用 TLS路径是默认 authentication/database 上下文

优先 mongodb+srv;标准 mongodb:// 需要列出 seed hosts,并显式处理 replicaSet 与 TLS。

官方连接文档 ↗
Apache CouchDBNoSQLHTTPHTTP/JSON默认端口 5984https://db.example:6984/appTLS:生产使用 HTTPS 或 TLS 终止代理URL 路径就是 database;文档 ID 继续追加

认证更适合放 Authorization/Cookie 头;复制源和目标也以数据库 URL 表达。

官方连接文档 ↗
RedisNoSQLURIRESP默认端口 6379rediss://[email protected]:6379/0TLS:rediss:// + CA/主机名校验路径数字是逻辑 DB;Cluster 通常只使用 DB 0

URI 支持取决于客户端;Cluster/Sentinel 还需要拓扑发现参数,不能只看单节点地址。

官方连接文档 ↗
ValkeyNoSQLURIRESP默认端口 6379valkeys://[email protected]:6379/0TLS:valkeys://路径数字是逻辑 DB

valkey-cli 使用 valkey:// 与 valkeys://;部分兼容客户端仍使用 redis:// / rediss://。

官方连接文档 ↗
Amazon DynamoDBNoSQLSDK 参数AWS JSON API over HTTPS默认端口 443region=ap-southeast-1; credentials=AWS default chainTLS:AWS HTTPS + SigV4AWS account + region → table

没有数据库连接 URI;SDK 根据 region、身份与 endpoint 构造并签名请求,本地模拟器才常覆写 endpoint。

官方连接文档 ↗
Apache CassandraNoSQLSDK 参数CQL native protocol默认端口 9042contactPoints=db1:9042,db2:9042; localDatacenter=dc1; keyspace=appTLS:驱动 SSL context + 节点证书cluster → keyspace → table

没有统一 URI;驱动需要 seed contact points 和 local datacenter,并自行发现拓扑。

官方连接文档 ↗
ScyllaDBNoSQLSDK 参数CQL native protocol默认端口 9042contactPoints=db1:9042,db2:9042; localDatacenter=dc1; keyspace=appTLS:驱动 SSL context + 节点证书cluster → keyspace → table

使用兼容 CQL 驱动;token-aware、DC-aware 负载均衡比把所有节点拼成 URL 更重要。

官方连接文档 ↗
ElasticsearchNoSQLHTTPHTTPS/JSON默认端口 9200https://search.example:9200TLS:HTTPS + CA fingerprint/证书URL/API 中选择 index 或 data stream

凭证通常单独使用 API key;Elastic Cloud 还提供 Cloud ID,但标准 endpoint URL 更通用。

官方连接文档 ↗
OpenSearchNoSQLHTTPHTTPS/JSON默认端口 9200https://search.example:9200TLS:HTTPS + CA;托管服务可能使用 SigV4URL/API 中选择 index

自托管通常 basic/cert,Amazon OpenSearch Service 常用 AWS SigV4;两者客户端配置不同。

官方连接文档 ↗
Neo4jNoSQLURIBolt + routing默认端口 7687neo4j+s://graph.example:7687TLS:neo4j+s:// 校验证书;neo4j+ssc:// 自签名database 通常由驱动 session 配置,不放 URI 路径

neo4j:// 启用路由发现,bolt:// 直连单个服务器;集群应用通常应使用 neo4j scheme。

官方连接文档 ↗
InfluxDBNoSQLHTTPHTTP API / FlightSQL(按产品)默认端口 8086 / 8181host=https://influx.example:8181; database=metrics; token=环境变量TLS:HTTPS + Bearer/Token header1.x database/RP;2.x org/bucket;3.x database

不同代际不是同一种连接串;token 应放环境变量或 secret store,而不是 URL 查询参数。

官方连接文档 ↗
TimescaleDBNoSQLURIPostgreSQL wire默认端口 5432postgresql://[email protected]:5432/app?sslmode=verify-fullTLS:sslmode=verify-fulldatabase → schema;TimescaleDB 是扩展

连接方式与 PostgreSQL 相同;连接成功后仍需确认目标 database 已安装正确版本的 timescaledb 扩展。

官方连接文档 ↗

一条连接串通常包含什么

text
scheme://identity@host:port/namespace?transport_and_session_options
部分回答的问题常见陷阱
Scheme / 子协议使用哪个驱动和网络协议?jdbc: 之后还有产品子协议;https:// 不等于 SQL 协议
Host / Seed list首次连接到哪里?集群通常需要 DNS SRV、seed hosts 或驱动拓扑发现,而不是永久固定单节点
Port服务监听在哪里?云服务、TLS 代理、HTTP 与 Native 协议可能使用不同端口
Namespace初始 database、schema、keyspace、dataset 或逻辑 DB 是什么?相同的 URL 路径在不同产品里含义不同
Options如何处理 TLS、超时、路由和会话?参数名属于具体驱动,不能跨驱动照搬

六个容易忽略的知识点

1. URI、JDBC URL 与 DSN 不是同一种标准

PostgreSQL URI 常被多种语言复用;JDBC URL 只对特定 Java 驱动有意义;ODBC DSN 可能只是本机配置文件里的名字。复制连接串前先确认目标语言、驱动名称和主版本。

2. 特殊字符必须正确编码

用户名、密码、database 或查询参数中的 @:/?#& 和空格可能改变 URI 结构。需要按驱动文档进行 percent-encoding;不要用手工字符串拼接代替驱动的配置对象。

3. “启用 TLS”不等于“验证了服务器身份”

生产配置应验证 CA 和主机名。trustServerCertificate=truesslmode=require 或跳过 hostname verification 可能只加密流量,却没有防止连接到错误服务器。

4. 连接池参数通常不属于数据库连接串

最大连接数、连接寿命、空闲回收、健康检查和泄漏检测通常由 HikariCP、应用框架或驱动池配置。把连接池配置和服务端会话参数混在一条 URL 中,会让迁移和排障更困难。

5. 云服务优先使用短期身份

BigQuery、DynamoDB、Snowflake 等更适合使用 ADC、IAM、OAuth、密钥对或工作负载身份。一个能永久使用的用户名密码连接串通常意味着密钥轮换和最小权限做得不够好。

6. 可连接不代表语义兼容

TiDB 能使用 MySQL 驱动、CockroachDB 和 TimescaleDB 能使用 PostgreSQL 驱动,但 SQL、事务重试、系统表、扩展和参数仍有产品差异。协议兼容只解决“如何建立会话”,不保证应用行为完全一致。

建议的配置分层

text
非敏感地址:DB_HOST / DB_PORT / DB_NAME / DB_OPTIONS
身份与密钥:Secret Manager / Workload Identity / 短期 Token
驱动行为:连接超时、TLS CA、application name
连接池行为:最大连接、生命周期、空闲回收、健康检查

这样既便于轮换凭证,也能把网络问题、认证问题、驱动问题和连接池问题分开排查。

Released under the MIT License.