开发者社区> 问答> 正文

sql_mode 为ANSI格式时,无法parse create table 语句

当设置set sql_mode = 'ANSI'. 时, show create table 返回的语句中,列和表名会用双引号包含。这是ANSI 标准SQL模式。

如下,而这种语句Druid的parser 会报错。无法解析。

CREATE TABLE "MessageInstance" ( "id" int(11) NOT NULL AUTO_INCREMENT, "clusterId" int(11) NOT NULL, "messageId" int(11) NOT NULL, "ipv4" varchar(10) DEFAULT NULL, "masterIpv4" varchar(10) DEFAULT NULL, "port" int(4) DEFAULT NULL, "managerPort" int(4) DEFAULT NULL, "online" tinyint(4) DEFAULT NULL, "status" tinyint(4) DEFAULT NULL, "info" varchar(100) DEFAULT NULL, "role" tinyint(4) DEFAULT NULL, "created" datetime DEFAULT NULL, "updated" datetime DEFAULT NULL, PRIMARY KEY ("id"), KEY "ix_messageId" ("messageId") )

错误:

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' KEY "ix_messageId" ("messageId") )',expect LPAREN, actual LITERAL_ALIAS ix_messageId

能否给予支持解析?

原提问者GitHub用户ChinaXing

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

    当MySQL的sql_mode设置为ANSI格式时,可能会导致无法解析CREATE TABLE语句。这是因为ANSI模式下,MySQL的SQL解析器会按照ANSI SQL标准进行解析,而不是按照MySQL特有的语法规则进行解析,从而导致解析错误。

    2023-07-30 09:39:11
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    这个问题是由于Druid的解析器不支持双引号包含的列和表名引起的。在ANSI SQL模式下,双引号是用来转义标识符的,以允许使用特殊字符或关键字作为列和表名。然而,Druid的解析器可能只支持使用反引号(`)来转义标识符。

    要解决这个问题,您可以尝试以下方法之一:

    1. 修改创建表语句,将双引号替换为反引号。例如:

    CREATE TABLE MessageInstance ( id int(11) NOT NULL AUTO_INCREMENT, clusterId int(11) NOT NULL, messageId int(11) NOT NULL, ipv4 varchar(10) DEFAULT NULL, masterIpv4 varchar(10) DEFAULT NULL, port int(4) DEFAULT NULL, managerPort int(4) DEFAULT NULL, online tinyint(4) DEFAULT NULL, status tinyint(4) DEFAULT NULL, info varchar(100) DEFAULT NULL, role tinyint(4) DEFAULT NULL, created datetime DEFAULT NULL, updated datetime DEFAULT NULL, PRIMARY KEY (id), KEY ix_messageId (messageId) )

    1. 尝试使用不同的SQL解析器或数据库工具,以确保它们能够正确解析双引号包含的列和表名。

    请注意,虽然使用双引号包含列和表名在ANSI SQL模式下是有效的,但这种用法在其他数据库中可能不被支持,并且可能会导致移植性问题。因此,在编写创建表语句时,最好避免使用特殊字符和关键字作为列和表名,或者在必要时使用反引号进行转义。

    希望这些信息对您有帮助。如果您还有其他问题,请随时提问。

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

    原回答者GitHub用户wenshao

    2023-07-06 12:22:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载