关于CRMEB-JAVA多商户项目数据库升级MYSQL8说明
1.准备工作
准备一个mysql8数据库,并导入数据。
如果服务器是内存在4G,使用宝塔等方式,可能无法安装mysql8数据库,考虑自行在服务器编码式安装后,外连到宝塔或其他面板上。
2.pom.xml文件修改
将原来的mysql依赖升级为8.0.33版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
3.yml配置文件修改
修改
datasource: driver-class-name: com.mysql.jdbc.Driver
为
datasource: driver-class-name: com.mysql.cj.jdbc.Driver
4.代码model类关键字处理
如果model类中包含rank之类的mysql8保留关键字,需要进行处理
添加@TableField(value = "xxxx")注解,如下图
5.代码sql处理
主要是因为mysql高版本中使用了ONLY_FULL_GROUP_BY模式
要求group by后的字段要与select后的查询字段一致,否则就会报错。
所以处理项目中使用group by 语句的地方。
a.Mysql-plus相关
这种可是全文搜索 groupBy(进行搜索,修改示例如下:
如果不是group by 中的字段,也不是公式字段,需要使用ANY_VALUE()函数进行处理
有些order by 中的字段,需要使用MAX()函数进行处理
b.Mapper.xml文件
同理,需要修改sql中的select查询字段。
6. 不修改sql处理方法
如果不想修改sql,就要将ONLY_FULL_GROUP_BY模式去掉,有三种方案。
方案一:navcat处理
打开navcat
使用sql 查询
select @@GLOBAL .sql\_mode;
去掉ONLY_FULL_GROUP_BY,重新设置值。
set @@global.sql\_mode='STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_ENGINE\_SUBSTITUTION';
方案二: 修改配置my.ini文件
在mysql安装目录下,修改my.ini文件
sql\_mode=STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION
然后重启mysql数据库
方案三:修改my.cnf文件
编辑my.cnf文件
vim /etc/my.cnf
在[mysqld]下面添加一行
sql\_mode=STRICT\_TRANS\_TABLES,NO\_ZERO\_IN\_DATE,NO\_ZERO\_DATE,ERROR\_FOR\_DIVISION\_BY\_ZERO,NO\_AUTO\_CREATE\_USER,NO\_ENGINE\_SUBSTITUTION
然后重启mysql数据库