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$'

密码有特殊字符,加上单引号。

常见踩坑汇总

  1. shell 使用双引号,密码带$被解析成环境变量,密码实际传参错误,报访问拒绝。✅用单引号或者交互式输入。
  2. JDBC 不做 url 编码,& #直接截断 url,连接报错。✅urlencode 编码。
  3. SQL 密码含有单引号,只写一个引号语法报错。✅SQL 内部两个单引号转义。
  4. mysqldump 备份命令同样遵守 shell 规则
mysqldump -uroot -p'Pass!@#123' db > dump.sql
posted @ 2026-09-07 10:15  苹果佳儿  阅读(17)  评论(0)    收藏  举报