java.sql.SQLException: sql injection violation, syntax error: syntax error, error in :'RepCHARACTER SET utf8 COLLATE utf',expect IDENTIFIER, actual IDENTIFIER CHARACTER : CREATE DATABASEtestRepCHARACTER SET utf8 COLLATE utf8_general_ci at com.alibaba.druid.wall.WallFilter.check(WallFilter.java:711) at com.alibaba.druid.wall.WallFilter.connection_prepareStatement(WallFilter.java:240) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:448) at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342) at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:318) at com.feeyo.dbsync.entry.consumer.MysqlConsumer.comsume(MysqlConsumer.java:71) at com.feeyo.dbsync.MysqlBinlogEventTransfer.flush(MysqlBinlogEventTransfer.java:111) at com.feeyo.dbsync.entry.EntryTransactionBuffer.flush(EntryTransactionBuffer.java:120) at com.feeyo.dbsync.entry.EntryTransactionBuffer.add(EntryTransactionBuffer.java:70) at com.feeyo.dbsync.MysqlBinlogEventTransfer.run(MysqlBinlogEventTransfer.java:100) Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'Rep CHARACTER SET utf8 COLLATE utf',expect IDENTIFIER, actual IDENTIFIER CHARACTER at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:210) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:307) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:112) at com.alibaba.druid.wall.WallProvider.checkInternal(WallProvider.java:619) at com.alibaba.druid.wall.WallProvider.check(WallProvider.java:574) at com.alibaba.druid.wall.WallFilter.check(WallFilter.java:699) ... 9 more
原提问者GitHub用户zhuam
这段SQL语句是一个创建数据库的语句,其中指定了数据库名称为testRep,并指定了数据库的字符集为s。然而,该SQL语句存在明显的语法错误,可能会导致执行失败。
具体来说,可能存在以下问题:
缺少字符集声明:在MySQL中,需要使用CHARACTER SET关键字来指定数据库的字符集。在该SQL语句中,指定了字符集为s,但是s不是一个有效的字符集名称。如果未指定有效的字符集名称,可能会导致SQL执行失败。
语句不完整:在该SQL语句中,指定了数据库名称和字符集,但是缺少了一些必要的语句部分。例如,应该指定CREATE DATABASE关键字来表示创建数据库。如果未指定这些关键字,可能会导致SQL执行失败。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
根据您提供的错误信息,您在Druid连接池中执行了一个CREATE DATABASE语句,并且遇到了一个SQL注入违规错误。具体错误信息是:sql injection violation, syntax error: syntax error, error in :'RepCHARACTER SET utf8 COLLATE utf',expect IDENTIFIER, actual IDENTIFIER CHARACTER : CREATE DATABASEtestRepCHARACTER SET utf8 COLLATE utf8_general_ci。
根据错误信息,Druid的SQL语法解析器检测到了一个语法错误,该错误可能是由于SQL注入引起的。Druid连接池的WallFilter组件用于检测和防止SQL注入攻击,它会对执行的SQL语句进行验证。在您的情况下,Druid的WallFilter检测到了一个不符合语法规则的SQL语句,并抛出了异常。
根据您提供的CREATE DATABASE语句,问题可能是在数据库名称中存在某些特殊字符或语法错误。请确保您的数据库名称符合MySQL的标识符规则,并且没有任何语法错误。您可以尝试使用合法的数据库名称,例如:
CREATE DATABASE testRep CHARACTER SET utf8 COLLATE utf8_general_ci;
您可能需要根据实际情况进行适当的调整和修改。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。