Поддерживает ли HSQLDB значения по умолчанию для перечислений в режиме совместимости MySQL?

#mysql #hsqldb

#mysql #hsqldb

Вопрос:

Я использую экземпляр HSQLDB в памяти (версия 2.5.1) для модульных тестов Java. В экземпляре включен режим совместимости с MySQL. Работает следующий оператор create:

 CREATE TABLE people
(
  is_subscribed enum('y','n') NOT NULL
)
 

Однако, если я попытаюсь добавить значение по умолчанию, подобное этому:

 CREATE TABLE people
(
  is_subscribed enum('y','n') DEFAULT 'n' NOT NULL
)
 

Я получаю следующее сообщение об ошибке:

 java.sql.SQLSyntaxErrorException: unexpected token: DEFAULT : line: 3 in statement [CREATE TABLE people
 

Есть ли способ указать значение по умолчанию для типа перечисления?

Комментарии:

1. Вы пробовали NOT NULL DEFAULT 'n' ? То есть просто измените порядок параметров столбца в обратном порядке. Документ синтаксиса показывает, что значение по УМОЛЧАНИЮ предшествует NOT NULL, но это должен быть быстрый тест, чтобы подтвердить это.

2. @BillKarwin Да, я пытался, но это не сработало. Как вы сказали, документы требуют, чтобы значение по УМОЛЧАНИЮ было установлено первым, и HSQLDB, похоже, выдает исключение, если порядок отменен.

Ответ №1:

Версии HSQLDB до 2.5.1 не поддерживают предложение DEFAULT напрямую для объявлений перечислений MySQL. Это может поддерживаться в более поздних версиях.

Вы можете добавить значение по УМОЛЧАНИЮ после создания таблицы. Использовать:

 ALTER TABLE people ALTER COLUMN is_subscribed SET DEFAULT 'n'
 

Обновление: теперь это поддерживается в последнем коде. Вы можете проверить код и создать jar. Обновление появится в следующем выпуске.