springdata-jpa与mysql集成,表名大小写问题

本文探讨了SpringData-JPA与MySQL在不同环境下(Windows与Linux)的大小写敏感性问题,包括默认行为、如何配置MySQL以改变其默认的大小写敏感性,以及如何在SpringData-JPA中调整大小写敏感性。提供了具体配置示例,包括在YML文件中配置以及自定义命名策略。

springdata-jpa与mysql

一 、springdata-jpa 的大小写

springdata-jpa默认是区分大小写的,但是生成的sql语句和字段名默认都是小写。且会将驼峰命名法转为对应的下划线。

如:
表名:USER--->user
属性:userName--->user_name

二、mysql的大小写

mysql在windows环境默认不区分大小写,但是在linux环境下默认区分大小写.

MySQL在Linux下数据库名、表名、列名、别名大小写规则是这样的:

  1. 数据库名与表名是严格区分大小写的。

  2. 表的别名是严格区分大小写的。

  3. 列名与列的别名在所有的情况下均是忽略大小写的。

  4. 变量名也是严格区分大小写的。

方案一 数据库的配置

如果想修改数据的默认配置课按照下面的步骤进行:

# 用root帐号登录后,在/etc/my.cnf 中的[mysqld]后添加添加
lower_case_table_names=1
# 重启MYSQL服务,这时已设置成功:不区分表名的大小写,0:区分大小写,1:不区分大小写

方案二 建表语句的配置

当然建表的时候也可以指定 COLLATE 修改,参考:MYSQL中的COLLATE是什么?

设置表或行的collation,使其为binarycase sensitive。在MySQL中,对于Column Collate其约定的命名方法如下:
*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写
*_cs: case sensitive collation,区分大小写
*_ci: case insensitive collation,不区分大小写

需要注意的是:mysql 8.0开始,mysql默认的CHARSET已经不再是Latin1了,改为了utf8mb4,并且默认的COLLATE也改为了utf8mb4_0900_ai_ci

三、springdata-jpa 大小写敏感切换:

在yml中配置如下配置(以下二选一):

#直接映射,不会做过多任何的处理和转换
org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
#表名,字段为小写,当有大写字母的时候会添加下划线分隔符号(默认是这个)
org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

如果还不满足你的要求可以自定义,如:你想使用SpringPhysicalNamingStrategy ,又想命名不被转化为小写,可以自定义实现自己的逻辑,像SpringPhysicalNamingStrategy 中isCaseInsensitive方法是用来指定数据库是否区分大小写的。

//自定义配置类
public class MySQLUpperCaseStrategy extends SpringPhysicalNamingStrategy {
    @Override
    protected boolean isCaseInsensitive(JdbcEnvironment jdbcEnvironment) {
        return false;
    }
}

四、参考链接:

  1. Mysql区分大小写问题
  2. Hibernate数据库配置项中命名策略说明
  3. spring boot 1.5.4使用JPA,遇到Mysql区分大小写的问题
  4. SpringBoot Jpa使用时碰到的问题总结一
  5. SpringBoot Jpa使用时碰到的问题总结二
  6. Spring Data JPA column 驼峰与下划线的转化
  7. MYSQL中的COLLATE是什么?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

T-OPEN

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值