【问题标题】:MySQL code that I try to run on RDS gets a syntax error, but in a syntax checker for the same version, it runs fine我尝试在 RDS 上运行的 MySQL 代码出现语法错误,但在相同版本的语法检查器中,它运行良好
【发布时间】:2018-02-03 01:19:31
【问题描述】:

所以我有一个带有 MySQL 5.6.37 引擎的 AWS RDS 实例,我正在使用 MySQL 5.6 版在 sqlfiddle.com 上检查我的代码语法。

我在sqlfiddle里放的代码是

CREATE TABLE Teacher_Times(
  TEACHER_ID TEXT,
  BEG_TIME TIME,
  END_TIME TIME,
  DAYS VARCHAR(9) DEFAULT "MTWRF",
  TYPE VARCHAR(11) DEFAULT "unavailable");

我连接到 rds 的代码使用的 jdbc 配置与此人的堆栈溢出帖子非常相似:Not able to set spring.datasource.type

在我的代码中我有

    result =
            "CREATE TABLE Teacher_Times(\n" +
            "   TEACHER_ID TEXT,\n" +
            "   BEG_TIME TIME,\n" +
            "   END_TIME TIME,\n" +
            "   DAYS VARCHAR(9) DEFAULT \"MTWRF\",\n" +
            "   TYPE VARCHAR(11) DEFAULT \"unavailable\");";
    jdbc_t.execute(result);
    result = "";

这种用于进行查询的通用格式在许多其他地方都有效,我不知道 AWS 的东西是否相关。

确切的错误是“com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以了解在“MTWRF”附近使用的正确语法' 在第 5 行"

【问题讨论】:

    标签: mysql double-quotes ansi-sql sql-mode


    【解决方案1】:

    看起来ANSI_QUOTES 模式已启用。我可以重现错误

    SET sql_mode = 'ANSI_QUOTES';
    

    http://rextester.com/JXV28208

    尝试使用单引号:

    CREATE TABLE Teacher_Times(
      TEACHER_ID TEXT,
      BEG_TIME TIME,
      END_TIME TIME,
      DAYS VARCHAR(9) DEFAULT 'MTWRF',
      TYPE VARCHAR(11) DEFAULT 'unavailable');
    

    【讨论】:

    • 当我使用单引号时,错误不会改变。它甚至将错误表示为接近 '"MTWRF"' 仍然有双引号
    • @AviRudich 你不觉得奇怪吗?试试这个DAYS VARCHAR(100) DEFAULT "if_you_do_not_see_this_in_the_error_message_then_you_are_executing_something_else"
    • 我这样做了,我看到了那个错误信息。我能想到的只是 jdbc.execute() 可能正在为我替换单引号
    • 只是为了好玩,我尝试将 sql_mode 设置为 '',但它没有改变任何东西
    • 抱歉,无法帮助您处理 JDBC。禁用 ANSI_QUOTES works here
    猜你喜欢
    • 2021-11-25
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多