SQL syntax error, expected token is 'EQ', actual token is 'IDENTIFIER',
这个问题是shardingjdbc的一个问题,因为它不支持某些SQL,如果不是必要进行分库分表的话,就不要使用 sharding-jdbc,因为会有诸多的限制和不方便(我的版本:1.5.4.1)可能是我的版本太旧了,也许升级下版本就可以了,但是我的项目比较复杂,升级可能会引出新的问题,所以就用了官方推荐的多数据源解决。
进入官网:http://shardingjdbc.io/
github源码:https://github.com/shardingjdbc/sharding-jdbc
官方demo:https://github.com/shardingjdbc/sharding-jdbc-example
SQL语句限制(将已有项目加入sharding进行分表最难的就是修改以前的SQL语句)
有限支持子查询
不支持包含冗余括号的SQL
不支持HAVING
不支持OR,UNION 和 UNION ALL
不支持特殊INSERT
每条INSERT语句只能插入一条数据,不支持VALUES后有多行数据的语句
不支持DISTINCT聚合
不支持dual虚拟表
不支持SELECT LAST_INSERT_ID()
不支持CASE WHEN
举例:
(1) sql中出现’where order_id=1 OR order_id=2’,运行时会报sharding的异常No support ‘OR’
(2) 关于冗余括号,如’…join … on a.id=b.id AND(1=1) where …’,这个AND(1=1)若放在where后面不会异常,但放在join on 后面就会出现以下异常:
io.shardingjdbc.core.parsing.parser.exception.SQLParsingException: SQL syntax error, expected token is ‘EQ’, actual token is ‘INT’, literals is ‘1’.
对sql的部分限制是全局的(如OR、CASE WHEN、冗余sql,部分子查询等),对于不分表的,要添加另外一个数据源。参考官方FAQ第八条:http://shardingjdbc.io/docs_cn/01-start/faq/。也可以参考我之前写过的文章:https://blog.csdn.net/baidu_36882394/article/details/106714573