踩坑记录
更新: 12/8/2025 字数: 0 字 时长: 0 分钟
2025 年 10 月 17 日
Spring Boot 连接 MySQL 报“密码错误”问题
问题表现:在
application.yml中配置 MySQL 的用户名密码时,明明密码是正确的,但连接始终提示Access denied for user或密码错误。原因分析:YAML 对数值以 0 开头的内容,可能会自动解析为八进制。例如:
yamlpassword: 0127在解析阶段,
0127可能不再是字符串,而是当作 八进制数 87 处理,从而导致最终连接密码与真实密码不一致。正确写法与解决方案:如果密码以
0开头(如:012345),请使用引号包裹以确保按字符串解析:yamlpassword: "012345"建议:
- 账户、密码等敏感字符串 尽量避免使用数字开头,尤其是 0
- 遇到以 0、特殊符号、纯数字等形式的字符串字段配置,建议统一加引号,避免解析被歧义为其他类型
为什么会发生?(底层原理)
YAML 不是 JSON,它支持类型推断
YAML 规范(尤其 1.1)中明确规定数字类型可根据格式推断为:
格式 解释 123 十进制 0x1A 十六进制 0123 八进制 true/false 布尔值 yes/no 布尔值 on/off 布尔值
因此 0127、0777、00001 等值都可能被 YAML 解析成八进制而非字符串
虽然 YAML 1.2 已提出不再默认将前导零解析为八进制,但目前 Spring Boot、Jackson、SnakeYAML 等主流库仍遵循 YAML 1.1 行为,因此依然会触发此坑。
