Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY

2021/11/24 19:40:38

本文主要是介绍Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!



前言

      是不是升级了mysql版本,或者安装mysql后出现的问题,mysql 5.7.5以后版本加入sql_node校验。好多函数可能不规范不能使用。




1.方式一   简单粗暴法

set @@global.sql_mode  ='';   -- 直接在mysql控制台将校验设置成空

 直接将校验设置成空后,重启电脑后mysql会自动还原配置(等于没解决)



2. 方式二  (Mac 直接看这里)

此处针对于Mac,Windows其实也是一样的 

1.   我们要在/etc下新建my.cnf
2.   $ cd /etc
3.   $ sudo vim my.cnf   

将下面的文档拷贝到my.cnf,  如果wq无法退出,  使用wq!命令,还不行用w !sudo tee %强制保存

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL

[client]
default-character-set=utf8

[mysqld]
log-error=/usr/local/mysql/data/mysqld.log
# skip-grant-tables
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M

# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin

# These are commonly set, remove the # and set as required.
# basedir = .....
# datadir = .....
# port = .....
# server_id = .....
# socket = .....

# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M 

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

4. 这个时候需要重启mysql服务,必须用命令重启

 5. 执行下面的命令重启,如果设置Stop MySQL Server没关这里是关不掉的。

sudo /usr/local/mysql/support-files/mysql.server restart

 注意:  设置里关闭MySQL按钮和这个重启命令是冲突的。

            设置里不关服务,使用命令是无法重启的。同样用命令启动的服务,设置里也关不掉。

sql_mode常用值如下: 

  1. 如果不想检验sql就把sql_node配置成null,规范一点就加上函数。

ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

NO_AUTO_VALUE_ON_ZERO:

该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

STRICT_TRANS_TABLES:

在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

NO_ZERO_IN_DATE:

在严格模式下,不允许日期和月份为零

NO_ZERO_DATE:

设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

ERROR_FOR_DIVISION_BY_ZERO:

在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

NO_AUTO_CREATE_USER:

禁止GRANT创建密码为空的用户

NO_ENGINE_SUBSTITUTION:

如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

PIPES_AS_CONCAT:

将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

ANSI_QUOTES:

启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

原文链接:mac mysql sqlmode_MySQL的sql_mode模式说明及设置_我是你们的老贞的博客-CSDN博客

sql_node是什么?

        sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。(这里指的是开发环境)

         在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。


 



这篇关于Caused by: java.sql.SQLSyntaxErrorException: Expression #1 of ORDER BY的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程