数据库连接串

填参数生成 URI、JDBC、Go、Python、Node、PHP 八种写法,逐形式标出转义风险。

这个页面把一份连接字段(类型、主机、端口、用户名、口令、库名、一组 key=value 参数)展开成八种写法,覆盖 MySQL/MariaDB、PostgreSQL、Redis、MongoDB、SQLite 五种数据库;反向也走得通,解析模式把任意一种本页能生成的写法拆回字段。转义是这个页面的核心,而且各形态的规则互不相同,代码按各自的语法处理。

不是每种类型都有八种写法,缺的都是明说的不适用而不是漏掉:Redis 没有主流 JDBC/PDO/SQLAlchemy 生态,也不认 Go 的 DSN 串(go-redis 收选项结构体);MongoDB 同样只给 URI 与环境变量行(官方 Node 驱动收 URI+选项,不收平铺对象);SQLite 没有 Go DSN 与配置对象形态。SQL Server、Oracle、ClickHouse 本期不做——各家 URI/方言细节分歧大,没逐条核对过就不装作支持。解析时歧义一律报告、绝不静默猜,报错而不是给一个看似对的结果。显示区默认开遮罩,遮罩只影响观感,解出来的值本身没有被处理。本页不发任何网络请求、不写 localStorage,填过的字段刷新即失;「下载全部写法 .txt」导出的是未遮罩明文,文件里可能含可用的数据库凭据,按钮旁就是这句警告。

数据库连接串怎么用

  • 先选类型再搭字段:五种类型切换时端口输入框的占位符给出该类型默认值(MySQL/MariaDB 3306、PostgreSQL 5432、Redis 6379、MongoDB 27017;留空即用默认)。Redis 有 rediss TLS 开关与 /库序号、MongoDB 有 +srv 开关(开启后端口被丢弃并说明规格原因)、SQLite 有 :memory: 开关且「数据库名」栏变成文件路径、MySQL 有 Go 形态的 tcp/unix 网络选择(unix 填套接字路径,如 /tmp/mysql.sock)。参数框一行一对 key=value,可加任意多。
  • 读输出与危险面板:八种写法逐条列出,不适用的写明原因;每条下面的小字是该形态自己的注意事项(如 postgresql:// 与 postgres:// 之争、SQLAlchemy 的驱动后缀要按你装的包改、DATABASE_URL 命名是惯例不是标准)。「这个口令在哪些写法里危险」面板逐字符列出命中项与所用规则,# 截断、;; 加倍、Go 无转义这些都在那里点名。显示区默认开遮罩(口令显示 •••,URI 编码态与 .NET 加倍态都替换;遮罩只影响观感,解出来的值本身没有被处理)。URI 里 IPv6 主机自动加方括号;user@host(没有密码字段)与 user:@host(显式空密码)语义不同,两种都会按你的开关原样输出。
  • 解析与导出:「解析」标签页粘贴任意一种串(含 DATABASE_URL= 前缀也行),得到字段表 + 驱动特性 + 可疑 + 无法信任四类信息。解析模式认 jdbc: 前缀、scheme 里的 +driver、mongodb+srv、sqlite::memory:、@tcp(/@unix( 结构、redis://:pass@host/2 的空用户名与库序号、.NET 的 ;; 与引号包裹、Go 参数段的 +;每个驱动特性都作为 quirk 报告出来。本页没有复制按钮,选中即可自行复制;下载按钮导出全部支持的写法为一个 .txt,内容是未遮罩明文,请当作凭据文件对待。
  • 八种写法与五种库:展开成八种写法:通用 URI、JDBC URL、Go 驱动 DSN、Python SQLAlchemy 的 dialect+driver://、Node 驱动配置对象(合法 JSON)、.NET/ODBC 分号串、PHP PDO DSN、以及 DATABASE_URL= 环境变量行。覆盖五种数据库:MySQL/MariaDB(默认端口 3306)、PostgreSQL(5432)、Redis(6379,rediss:// 是它的 TLS 写法)、MongoDB(27017,另有 mongodb+srv:// 形式)、SQLite(文件路径或 :memory:,没有主机与端口)。

常见问题

为什么口令里有 # 时连接串会「悄悄」不对?

URI 语法(RFC 3986)里第一个未编码的 # 开始片段(fragment),片段不属于连接串的任何字段,多数解析器直接丢弃它——于是 pa#ss 的口令在传输时实际只剩 pa,报出来的认证失败查不到原因。所以本工具把 # 编成 %23 再发出,粘贴解析遇到裸 # 也会明确报「片段被丢弃、口令可能正是在这里截断的」,而不是给你一个悄悄少了一截的结果。

为什么 Go MySQL 驱动的连接串不能当 URI 解析?

它的结构 [user[:pass]@][net(addr)]/dbname[?参数] 不是 URI:主机端口包在 tcp(...) 的圆括号里,@ 既是凭据分隔符又可能出现在口令里,而且这套语法没有任何转义机制。go-sql-driver/mysql 的 README 明说用户名/口令含 @ : / ( ) ? 会解析歧义、建议改用 Config 字段传值。本页照它「最后一个 @ 之前是 user:pass」式的启发拆回来,但这类口令一律标为不可全信,并逐字符点名。

mongodb+srv:// 这种串在这页能得到什么?

只能得到字符串本身的形状:+srv 形式的主机只是集群域名,真实节点和端口要发起 DNS SRV(外加 TXT 选项)查询才知道,静态页面做不到,所以不校验域名、也不替你补端口——按 MongoDB 官方规格这种串里本来就不允许出现端口,工具会在你手填端口时警告并丢弃。要一个确定的 host:port 列表,请改用普通 mongodb:// 形式或去集群配置里复制现成的串。

各形态的转义规则分别是什么?

URI 族(通用 URI、JDBC、SQLAlchemy、环境变量行)把用户名与口令里 RFC 3986 unreserved 集(字母数字和 - . _ ~)之外的每个字符按 UTF-8 编成 %XX——冒号编 %3A、@ 编 %40、# 编 %23、空格编 %20、字面 % 编 %25,参数值里的 = 与 & 也编码;解码只做一次,+ 保持字面加号(form 编码里 + 才是空格,Go 形态的参数段按 url.QueryEscape 惯例反而把 + 解成空格,页面注明所用口径)。.NET/ODBC 分号串用另一套规则:字面分号写成两个(; → ;;),含双引号或首尾空白的值整体用双引号包裹并把内部引号翻倍(包裹态里分号不再加倍)。PHP PDO 的值按 PHP 文档实测行为处理:含 : ; " \ 时双引号包裹、内部反斜杠与引号用反斜杠转义;口令本身不进 PDO DSN,它是 new PDO() 的构造参数。PostgreSQL 的关键字=值形态按 libpq 规则给含空格的值加单引号。Go MySQL 的 user:pass@tcp(host:port)/db 形态则没有任何转义机制——工具按字面拼串并逐条警告口令/用户名里的 @ : / ( ) ? 会破坏解析(go-sql-driver 文档建议改用 Config 字段)。

哪些歧义会直接报错而不是猜一个?

歧义一律报告、绝不静默猜:未编码的裸 # 会被报为片段截断点、含冒号未加方括号的 IPv6 报不可信、%2525 报疑似双重编码、端口不在 1–65535 直接报错、Go DSN 里口令含 ? 时按官方解析顺序必然被切坏、报错而不是给一个看似对的结果。

对应功能编号 #109无需安装,手机端同样可用按 Ctrl + K 换工具