Champ de texte compatible avec mysql et hsqldb
j'ai une application qui utilise une base de données mysql mais je voudrais exécuter les tests unitaires pour l'application dans une base de données hsqldb en mémoire. Le problème est que certains de mes objets modèles persistants ont des champs que j'ai annotés comme columnDefinition = "TEXT" pour forcer mysql à prendre en compte les longues valeurs de chaîne, mais maintenant hsqldb ne sait pas ce que signifie TEXT. Si je le change en CLOB, alors hsqldb est correct mais mysql échoue.
y a-t-il une définition standard de colonne? que je peux utiliser pour de longues chaînes compatibles avec mysql et hsqldb?
3 réponses
ce qui a fonctionné pour moi était d'activer simplement le mode de compatibilité MySQL en changeant l'URL de connexion en jdbc:hsqldb:mem:testdb;sql.syntax_mys=true
vous pouvez utiliser la même solution que celle proposée dans ce post pour les colonnes de texte PostgreSQL et HSQLDB avec hibernation:
Hibernate postgresql/hsqldb TEXTE de la colonne de problème d'incompatibilité
comme HSQLDB vous permet de définir le texte comme un TYPE ou un domaine, ceci peut être une solution si vous découvrez comment exécuter une instruction telle que celle ci-dessous avant chaque test exécuté avec HSQLDB via Hibernate.
CREATE TYPE TEXT AS VARCHAR(1000000)
Update for HSQLDB 2.1 and later: cette version supporte un mode de compatibilité MySQL. Dans ce mode, le type de texte MySQL est supporté et traduit en LONGVARCHAR. LONGVARCHAR est par défaut un long VARCHAR, mais une propriété (sql.longvar_is_lob) permet de l'interpréter comme CLOB. Voir:
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
pas vraiment. MySQL A texte et BLOB, avec différents préfixes de taille pour indiquer leur taille maximale. hsqldb ne semble avoir que des cloches et diverses varchars. Comme si vous deviez caser vos tests en fonction de la base de données à laquelle vous parlez.
si vos chaînes de texte sont assez courtes, vous pouvez utiliser des varchars, mais celles-ci sont limitées à un peu moins de 64k dans mysql, et c'est la taille maximale d'une rangée, donc plus la varchar est grande, moins il y a d'espace pour d'autres champs.