开发者社区> 问答> 正文

druid-1.0.9 执行 CREATE DATABASE testRep CHARACTER S

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

展开
收起
山海行 2023-07-05 22:02:58 34 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这段SQL语句是一个创建数据库的语句,其中指定了数据库名称为testRep,并指定了数据库的字符集为s。然而,该SQL语句存在明显的语法错误,可能会导致执行失败。
    具体来说,可能存在以下问题:

    缺少字符集声明:在MySQL中,需要使用CHARACTER SET关键字来指定数据库的字符集。在该SQL语句中,指定了字符集为s,但是s不是一个有效的字符集名称。如果未指定有效的字符集名称,可能会导致SQL执行失败。

    语句不完整:在该SQL语句中,指定了数据库名称和字符集,但是缺少了一些必要的语句部分。例如,应该指定CREATE DATABASE关键字来表示创建数据库。如果未指定这些关键字,可能会导致SQL执行失败。

    2023-07-29 23:10:58
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 12:58:38
    赞同 展开评论 打赏
  • 根据您提供的错误信息,您在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;
    

    您可能需要根据实际情况进行适当的调整和修改。

    2023-07-06 08:51:48
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载