开发者社区> 问答> 正文

parseCreateDatabase没有解析default charset和default col

druid版本:1.0.9 测试代码抛出异常

String sql = "create database user default charset=utf8 default collate=utf8_general_ci;" MySqlStatementParser parser = new MySqlStatementParser(sql); List statementList = parser.parseStatementList();

原提问者GitHub用户myzhan

展开
收起
山海行 2023-07-05 21:49:16 61 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    如果需要解析default charset和default collate选项,可以考虑以下解决方案:

    手动解析:可以手动解析CREATE DATABASE语句中的default charset和default collate选项,例如使用正则表达式或字符串匹配等方式来提取这些选项的值。

    使用其他的SQL解析工具:如果Druid的SQL解析器无法正确解析default charset和default collate选项,可以尝试使用其他的SQL解析工具,例如ANTLR和JSqlParser等。

    2023-07-30 09:38:58
    赞同 展开评论 打赏
  • 支持的

    原回答者GitHub用户wenshao

    2023-07-06 12:29:36
    赞同 展开评论 打赏
  • 您遇到的问题可能是因为在 MySQL 语法中,CREATE DATABASE 语句的默认字符集和校对规则是通过 CREATE DATABASE 语句之后使用 ALTER DATABASE 语句指定的。因此,在 CREATE DATABASE 语句中使用 DEFAULT CHARSET 和 DEFAULT COLLATE 字句将被忽略。

    针对该问题,您可以使用以下两种方法来解决问题:

    不使用DEFAULT CHARSET和DEFAULT COLLATE 可以在 CREATE DATABASE 语句中省略 DEFAULT CHARSET 和 DEFAULT COLLATE 字句,例如:

    create database user; 复制 这样,Druid 就可以成功解析该语句。

    不要使用parseStatementList方法 另一种方法是使用 Druid 提供的 MySqlSchemaStatVisitor 类,该类可以解析数据库模式定义(DDL)语句并提取有用的信息,例如数据库名称、表名称、列名称、约束、索引等。它是通过解析 SQL 语句和分析统计信息来执行的。可以按如下方式使用:

    import com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser; import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;

    String sql = "create database user default charset=utf8 default collate=utf8_general_ci;"; MySqlStatementParser parser = new MySqlStatementParser(sql); MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor(); parser.parseStatement().accept(visitor);

    String database = visitor.getCurrentSchema(); String charset = visitor.getDefaultCharset(); String collate = visitor.getDefaultCollate();

    在上述示例中,我们首先使用 MySqlStatementParser 解析 SQL 语句,然后使用 MySqlSchemaStatVisitor 访问器提取默认字符集和默认校对规则。注意,由于我们使用 parseStatement 方法而不是 parseStatementList 方法,因此可以直接使用 accept 方法来访问语法树。

    2023-07-06 11:01:58
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载
又快又稳:阿里云下一代虚拟交换机解析 立即下载

相关镜像