Код MySQL, который я пытаюсь запустить в RDS, получает синтаксическую ошибку, но в средстве проверки синтаксиса для той же версии он работает нормально.

Итак, у меня есть экземпляр AWS RDS с движком MySQL 5.6.37, и я проверяю синтаксис своего кода на sqlfiddle.com с помощью mySQL версии 5.6.

Код, который я вставил в 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, настроенный очень похоже на сообщение о переполнении стека этого парня: Невозможно установить 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 дюймов


person Avi Rudich    schedule 03.02.2018    source источник


Ответы (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');
person Paul Spiegel    schedule 03.02.2018
comment
Когда я использую одинарные кавычки, ошибка не меняется. Он даже выражает ошибку как находящуюся рядом с «MTWRF», которая все еще имеет двойные кавычки. - person Avi Rudich; 03.02.2018
comment
@AviRudich Вам не кажется это странным? Попробуйте это DAYS VARCHAR(100) DEFAULT "if_you_do_not_see_this_in_the_error_message_then_you_are_executing_something_else" - person Paul Spiegel; 03.02.2018
comment
Я сделал это и увидел это сообщение об ошибке. Все, о чем я могу думать, это то, что jdbc.execute() может заменить одинарную кавычку для меня. - person Avi Rudich; 03.02.2018
comment
И просто для удовольствия я попытался установить sql_mode в '', и это ничего не изменило - person Avi Rudich; 03.02.2018
comment
К сожалению, не могу помочь вам с JDBC. Здесь работает отключение ANSI_QUOTES . - person Paul Spiegel; 03.02.2018
comment
Изменить: я получил его, чтобы начать работать. Раньше я только заменял двойные кавычки в MTWRF, чтобы увидеть, переместится ли ошибка в нижнюю строку, но ошибка оставалась в MTWRF, пока я также не заменил поле TYPE по умолчанию кавычками. - person Avi Rudich; 04.02.2018
comment
Ну.. странно. Я предполагаю, что у JDBC есть некоторая логика, чтобы определить, какой режим использовать. Когда он видит в запросе двойные кавычки, он заменяет все одинарные кавычки. Просто предположение. - person Paul Spiegel; 04.02.2018