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

SpringBoot整合Flyway+MySQL出现表不存在异常求助

问题排查与解决方案

1. 优先排查MySQL表名大小写敏感问题

MySQL的表名大小写规则依赖操作系统和配置:

  • Linux/类Linux环境(包括Docker容器)默认区分表名大小写(lower_case_table_names=0)
  • Windows环境默认不区分(lower_case_table_names=1)

你的Flyway脚本创建的是大写CUSTOMER表,但应用报错寻找小写customer表,这是最可能的根源:

  • 手动在MySQL中执行SELECT * FROM CUSTOMER;和SELECT * FROM customer;,验证哪个能返回结果,确认大小写匹配问题
  • 若使用Docker部署MySQL,可在启动命令中添加--lower_case_table_names=1参数强制不区分大小写,或统一表名大小写规则

2. 核对JPA实体类的表名映射

检查你的Customer实体类的@Table注解:

  • 如果注解写的是@Table(name = "customer"),在区分大小写的MySQL环境下会直接查找小写表,与Flyway创建的大写表不匹配
  • 修正方案:要么把实体类注解改为@Table(name = "CUSTOMER"),要么修改Flyway脚本创建小写customer表(推荐统一用小写,避免跨环境适配问题)

3. 确认应用数据源配置的准确性

即使IntelliJ能连接到目标数据库,也要确保应用启动时使用的数据源和手动连接的完全一致:

  • 检查application.properties/application.yml中的spring.datasource.url,确认库名是task-db,地址、用户名、密码与Docker的MySQL配置完全匹配
  • 查看应用启动日志,搜索spring.datasource相关输出,核对配置是否生效

4. 验证Flyway的执行状态

确认Flyway确实在应用启动时执行了迁移脚本:

  • 查看启动日志中是否有Flyway相关输出,比如Successfully applied 1 migration,证明脚本已执行
  • 检查是否存在flyway.enabled=false的配置(包括多环境配置文件),若有会导致迁移脚本不执行
  • 若使用多环境配置,确认当前激活的环境下Flyway的locations等配置未被覆盖

5. 统一数据库对象的大小写规范

修改Flyway脚本,将表名和字段名统一为小写(避免跨环境大小写问题):

CREATE TABLE IF NOT EXISTS `customer` (
`customer_id` int NOT NULL AUTO_INCREMENT,
`first_name` varchar(45) DEFAULT NULL,
 PRIMARY KEY (`customer_id`)
);

同时确保实体类的字段映射与数据库字段大小写一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:10:30