Я использую DataNucleus в качестве своего уровня персистентности (JDO) и вынужден использовать Oracle 11g в качестве базы данных (используя 11g XE для разработки). К сожалению, начиная с версии 11.2 семантика длины по умолчанию (NLS_LENGTH_SEMANTICS
) для столбцов VARCHAR
была установлена на byte
вместо char
, что означает, что все столбцы, которые предоставляют только размер, приведут к определению типа, подобному этому:
VARCHAR2(50 byte)
вместо:
VARCHAR2(50 char)
С точки зрения Oracle, решение имеет три аспекта:
- объявляет единицу измерения в вашем размере (то, что я пытаюсьдостичь с помощью метаданных JDO)
- изменять атрибут
NLS_LENGTH_SEMANTICS
в каждом сеансе - изменять атрибут
NLS_LENGTH_SEMANTICS
глобально (что, кажется, не работает с "Express Edition", я имеюя уже потратил на это целый день)
Я просматривал документацию по картографированию и постоянству, чтобы найти атрибуты метаданных, которые позволяют мне это делать. Я могу указать jdbcType
, sqlType
и, конечно, length
для столбца. Но нет юнита.
Любая помощь будет принята с благодарностью.