#关于高版本的tomcat(5.7以上)运行报sql_mode = only_full_group_by的问题
环境
系统 ubuntu 20.04
jdk 1.8.0.275
tomcat 9
原因
由于公司需求的原因,需要更新迭代版本。所以将以前系统依赖使用的版本做了一次大升级,在做升级的过程中絮叨的问题记录
其他系统软件的安装就不在这里面多说了
在这里主要记录的问题是关于mysql 的问题
1 先来说说安装吧
1)安装的方式多种多样,而我选择的自认为最懒的那种,然而却是最费时的
安装下载的辅助包是从官网下载的 dev.mysql.com/downloads/mysql/
sudo dpkg -i mysql-apt-config_0.8.16-1_all.deb
当然根据下载包名称的不同,需要做下更改
3)运行完成会弹出如下窗口,选择第一个后直接回车(RNTER)
如下弹出第二窗口依旧现在第一个
然后会弹出下一个窗口,你会发现跟第一个窗口一模一样,这个是正常的,这个时候我们直接选择OK 然后 ENTER .直至运行完会在输出信息中显示ok
到了这里,基本上已经完成了一大半,哈哈哈
对没错,是一大半
接下来的每一步都是关键
apt-get update
sudo apt-get install mysql-server
按照指示的步骤运行就可以了,其中需要注意的一点是,在运行的过程中可能需要你去设置root 登录密码,这一步你当然可以跳过,不需要设置(修正一下,如果选择mysql 8.0的版本,数据库密码可能需要重新修改,默认密码为空,如果选择兼容mysql 5.7 的版本的话,数据库密码会保存进去)
至此 一个简单的mysql 服务就搭建好了
可以通过命令查看版本是否是你所安装的版本
mysql --version
以上就是新手安装mysql 的过程
现在就是你们所关心的问题了,在敲代码的过程中难免会需要连接数据库,以及获取数据记录,进行需要的计算以及研究,因此对大量的数据进行分组还是很有必要的。
但是针对高版本的mysql 存在如下的问题(5.7 以及以上版本)
mysql 默认配置下是开启ONLY_FULL_GROUP_BY SQL 模式,mysql 会拒绝选择列表,HAVING 条件或 ORDER BY 列表的查询引用在 GROUP BY 子句中既未命名的非集合列,也不在功能上依赖于它们(可能这个不支持存在歧义,但由于码友文字功底缺陷,只能大概这样描述,具体的问题相信大家都懂,也欢迎大家来指正错误)
因此需要进行配置,配置的方式存在如下两种
1) 最简单的当然属于直接修改变量了
#进入mysql
mysql -uroot -p XXXX
#查询sql_mode 变量
select @@sql_mode ;
set @@sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
这种方式一旦mysql 重启就会失效。
2) 修改mysql 的配置文件,也是推荐的一种
配置文件一般默认安装在 /etc/mysql 里面
如果是5.7的版本,直接修改 my.cnf 文件即可
vim /etc/mysql/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 8.0.22 的话,my.cnf 的配置文件里面是同步去加载其他文件的,所以就不能直接在里面进行修改
因此需要在 /etc/mysql/mysql.conf.d 里面的 mysqld.cnf 的 [mysqld] 下添加
sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
注意 2点 (1)需要用双引号"" (2) 将 该 NO_AUTO_CREATE_USER 变量去掉
修改完成重启就可以了
service mysql restart
如果有不对的地方,欢迎指正!!!