错误日志
2023:05:03 01:10:36.305 ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper ? - Table 'db_mblog.TBL_USER_EXTEND' doesn't exist 2023:05:03 01:10:36.308 ERROR c.m.mblog.web.exceptions.DefaultExceptionHandler ? - could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:281) at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:255) at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:528) at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61) at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242) at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:149) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:95) at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212) at com.sun.proxy.$Proxy200.findAllByUid(Unknown Source)
原因
项目当中使用了大写的表名称,新装的mysql8.x是区分大小写的,而以前mysql5.7的查询的时候是忽略大小写的。所以出现了表不存在的错误。
通过名令查询lower_case_table_names=0 show VARIABLES like "lower_case_table_names%"
通过 set GLOBAL lower_case_table_names=1 或通过 set lower_case_table_names=1 报错:
1238 - Variable 'lower_case_table_names' is a read only variable 时间: 0.015s
解决方案1:
因我的表只有一两条sql语句查询的表名使用了大写,所以就直接将查询大写的表名统一成小写,以此以最小成本解决问题。
解决方案2:
在网上找到了其他的解决方案。【请谨慎尝试】附上原文链接:https://blog.csdn.net/qq_45547688/article/details/128675982。
在 MySQL 8 中,数据目录初始化之后,不再允许更改 lower_case_table_names = 1 的 值;
MySQL 基于某些原因,禁止在重新启动 MySQL 服务时将lower_case_table_names设置 成不同于初始化 MySQL 服务时设置的 lower_case_table_names 值。
也就是说启动(重启)MySQL 时,lower_case_table_names的值必须于,初始化 MySQL 时(安装 MySQL 后的首次启动)的值相同。
未安装 MySQL8的修改大小写配置的步骤如下:
添加 MySQL YUM repository (添加 MySQL 的 yam 仓库,略) 卸载当前系统中的其它 MySQL。(如果需要同时安装不同版本的 MySQL,请使用 tarball 发行版。) 清除数据目录: 为了能够初始化 MySQL,数据目录必须为空。 您可以选择对数据目录 使用非默认位置;也可以删除/var/lib/mysql 目录。 如果要保留旧的数据目录,请 先进行备份!
安装 MySQL 8 :通过 yam install
初始化前指定 lower_case_table_names = 1:
方法,在初次使用 systemd 启动 mysqld 之前,在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1。 初始化: systemctl start mysqld 为已安装的MySQL8设置不区分大小写
停止MySQL
删除数据目录,即删除 /var/lib/mysql 目录、 在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1 启动 MySQL
注意:本文归作者所有,未经作者允许,不得转载