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

为什么Ubuntu 20.04环境下Spring Batch连接MySQL生成小写表名

问题原因
  • 重复建表触发:你同时开启了数据库初始化自动执行自定义SQL和Spring Batch自带的自动建表功能:你自己的schema-mysql.sql执行生成了大写开头的BATCH_*表,Spring Batch默认执行的自带建表脚本生成了小写开头的batch_*表,所以出现两套重复表。
  • Linux下MySQL大小写规则:Ubuntu环境的MySQL默认lower_case_table_names参数值为0,即对表名大小写敏感,建表时如果没有特殊配置,不同脚本的大小写命名会被识别为不同的表。
  • 若你项目集成了Hibernate/JPA,默认的命名策略会自动将实体映射的表名转为全小写格式,也会额外生成小写表。
解决方案(使用自定义SQL中的大写表名)
  1. 关闭Spring Batch自动建表功能,在application.properties中添加如下配置,避免框架自动执行自带的建表脚本:
spring.batch.jdbc.initialize-schema=never
  1. 手动指定Spring Batch操作的表前缀为大写,避免框架查询时找不到大写表:
spring.batch.jdbc.table-prefix=BATCH_
  1. 若集成了Hibernate/JPA,添加如下配置关闭自动建表、保留SQL中定义的大小写:
spring.jpa.hibernate.ddl-auto=none
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
  1. 如需MySQL全局保留表名大小写,可修改MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]节点下添加配置后重启MySQL服务:
lower_case_table_names=0

注意:lower_case_table_names参数建议在MySQL初始化安装时设置,若现有库已存数据,修改前请提前备份全量数据,避免原有表无法访问。

  1. 清空当前spring库中所有重复的Spring Batch相关表,重启应用即可仅生成你自定义SQL中定义的大写表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:24:03