Подтвердить что ты не робот

Поле TEXT, совместимое с mysql и hsqldb

У меня есть приложение, которое использует базу данных mysql, но я хотел бы запустить модульные тесты для приложения в базе данных hsqldb в памяти. Проблема в том, что некоторые из моих устойчивых объектов модели имеют поля, которые я аннотировал как columnDefinition = "TEXT", чтобы заставить mysql обслуживать длинные строковые значения, но теперь hsqldb не знает, что означает TEXT. Если я изменю его на CLOB, то hsqldb отлично, но mysql не работает.

Есть ли стандартное определение столбца, которое я могу использовать для длинных строк, совместимых с mysql AND hsqldb?

4b9b3361

Ответ 1

Что сработало для меня, так это просто включить режим совместимости MySQL, изменив URL-адрес соединения на jdbc: hsqldb: mem: testdb; sql.syntax_mys = true

Ответ 2

Вы можете использовать то же самое решение, которое предлагается в этом столбце для столбцов PostgreSQL TEXT и HSQLDB с Hibernate:

Hibernate postgresql/hsqldb Задача несовместимости столбца TEXT

Как HSQLDB позволяет вам определять ТЕКСТ как ТИП или ДОМЕН, это может быть решением, если вы узнаете, как выполнить оператор, такой как ниже, перед каждым тестовым прогоном с помощью HSQLDB через Hibernate.

CREATE TYPE TEXT AS VARCHAR(1000000)

Обновление для HSQLDB 2.1 и более поздних версий: эта версия поддерживает режим совместимости MySQL. В этом режиме поддерживается тип MySQL TEXT и переводится в LONGVARCHAR. LONGVARCHAR по умолчанию является длинным VARCHAR, но свойство (sql.longvar_is_lob) позволяет интерпретировать его как CLOB. См:

http://hsqldb.org/doc/2.0/guide/dbproperties-chapt.html#dpc_sql_conformance

http://hsqldb.org/doc/2.0/guide/compatibility-chapt.html#coc_compatibility_mysql

Ответ 3

Не совсем. MySQL имеет TEXT и BLOB, с префиксами различных размеров, чтобы указать их максимальный размер. hsqldb, похоже, имеет только clob и различные varchars. Скорее всего, вы должны будете использовать специальный случай для своих тестов в зависимости от того, с какой базой данных вы разговариваете.

Если ваши текстовые строки достаточно короткие, вы можете использовать varchars, но они ограничены до 64k в mysql и максимальный размер строки, поэтому чем больше varchar, тем меньше места для других полей.