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
相关产品推荐
相关产品推荐

