Текстовое поле, совместимое в mysql и hsqldb - PullRequest
23 голосов
/ 15 февраля 2011

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

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

Ответы [ 4 ]

30 голосов
/ 06 сентября 2012

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

9 голосов
/ 16 февраля 2011

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

Проблема несовместимости столбцов Hibernate postgresql / hsqldb TEXT

AsHSQLDB позволяет вам определять TEXT как TYPE или DOMAIN, это может быть решением, если вы узнаете, как выполнять оператор, такой как приведенный ниже, перед каждым запуском теста с HSQLDB через Hibernate.

CREATE TYPE TEXT AS VARCHAR(1000000)

Updateдля 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

1 голос
/ 15 февраля 2011

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

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

0 голосов
/ 22 ноября 2018

Вы также можете решить некоторые проблемы на уровне поставщика JPA (Hibernate и т. Д.).

Например, с помощью @ Lob тип long / large определяется во время выполнения на основепоставщик (longvarchar / longtext MySql против clob в H2).

...