You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

YugabyteDB连接字符串中含@符号的密码使用及转义方法

在YugabyteDB连接字符串中转义含@的密码

密码中包含@符号时,直接写入连接字符串会被解析器误判为用户名与主机地址的分隔符,导致实际传递的密码不完整,这就是你遇到密码错误提示的原因。解决核心是对@进行URL编码(百分号编码),将其替换为%40,以下是不同场景的具体实现:

1. JDBC连接字符串

错误写法(密码中的@会被解析成分隔符)

jdbc:postgresql://yb-host:5433/mydb?user=myuser&password=p@ssw0rd

正确写法(将@替换为%40)

jdbc:postgresql://yb-host:5433/mydb?user=myuser&password=p%40ssw0rd

或者使用user:password@host格式时:

jdbc:postgresql://myuser:p%40ssw0rd@yb-host:5433/mydb

2. YSQLSH命令行工具

如果直接在shell中使用连接字符串,除了编码@,还要注意shell的转义规则,推荐两种方式:

  • 对密码部分进行URL编码后用单引号包裹连接字符串:
ysqlsh 'postgres://myuser:p%40ssw0rd@yb-host:5433/mydb'
  • 通过环境变量传递原始密码(无需手动编码,工具会自动处理):
export YSQL_PASSWORD='p@ssw0rd'
ysqlsh -h yb-host -p 5433 -U myuser -d mydb

3. 应用代码中处理

如果应用通过环境变量读取密码后拼接连接字符串,需要在代码中对密码进行URL编码,以Python为例:

import urllib.parse
import psycopg2
import os

# 从环境变量读取原始密码
raw_password = os.getenv("DB_PASSWORD")
# 对密码中的特殊字符进行URL编码
encoded_password = urllib.parse.quote_plus(raw_password)
# 拼接正确的连接字符串
conn = psycopg2.connect(
    dbname="mydb",
    user="myuser",
    password=encoded_password,
    host="yb-host",
    port=5433
)

关键注意点

  • 不要直接在连接字符串中写原始含@的密码,无论环境变量是否正确,解析器都会误分割内容。
  • URL编码是通用方案,几乎所有YugabyteDB兼容的驱动(PostgreSQL生态驱动)都支持。

内容的提问来源于stack exchange,提问作者dh YB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:24:53