mysql 用户登录密码有特殊字符
特殊字符:
!@#$%^&*()_+-=[]{}|;':",./?等,分shell 命令行、mysql 客户端内部、JDBC 连接串三种场景。
1、shell 命令行登录(mysql -u -p)
密码含特殊符号,两种写法
方式 A:交互式输入(最稳妥,不用转义,推荐)
mysql -uroot -p
#回车后输入密码,直接原样输入,不需要转义
方式 B:命令行直接写密码 -p'密码'
单引号包裹密码,防止 shell 解析特殊字符
#示例密码:Abc!@#123$
mysql -uroot -p'Abc!@#123$'
⚠️不要用双引号
"":$、!会被 shell 做变量 / 历史命令解析,会篡改密码。
如果密码里面本身含有单引号
':shell 单引号内无法转义单引号,优先用交互式登录。
带 host、端口完整示例:
mysql -uroot -p'Pass!123&test' -h127.0.0.1 -P3306
2、mysql 客户端内部 SQL(create user /grant/set password)
密码字符串用单引号包裹
CREATE USER 'test'@'%' IDENTIFIED BY 'Pass!@#$123';
SET PASSWORD FOR 'test'@'%' = 'Pass!@#$123';
GRANT ALL ON test.* TO 'test'@'%';
如果密码内部本身有单引号
',SQL 里用两个单引号转义 例密码:abc'123!
CREATE USER 'test'@'%' IDENTIFIED BY 'abc''123!';
3、URL/JDBC 连接串(最容易踩坑:URL 编码)
密码里 ! @ # $ % ^ & * ( ) [ ] 等,必须做 URLencode 编码 示例密码:Pass!@123$
!→%21@→%40#→%23$→%24
原密码:Pass!@123$ 编码后:Pass%21%40123%24
jdbc:mysql://127.0.0.1:3306/db?user=test&password=Pass%21%40123%24
4、my.cnf 配置文件写密码
[client]
user=root
password='Pass!@#123$'
密码有特殊字符,加上单引号。
常见踩坑汇总
- shell 使用双引号,密码带
$被解析成环境变量,密码实际传参错误,报访问拒绝。✅用单引号或者交互式输入。 - JDBC 不做 url 编码,
& #直接截断 url,连接报错。✅urlencode 编码。 - SQL 密码含有单引号,只写一个引号语法报错。✅SQL 内部两个单引号转义。
- mysqldump 备份命令同样遵守 shell 规则
mysqldump -uroot -p'Pass!@#123' db > dump.sql
浙公网安备 33010602011771号