У меня есть требование вставить греческие символы, такие как 'φ', в Oracle. Моя существующая структура БД не поддерживала его. При исследовании нашли различные решения, и я принял решение использовать NCLOB вместо CLOB. Он отлично работает, когда я использую unicode, 03A6, для 'φ' и использую функцию UNISTR в редакторе SQL для вставки. Как и ниже.Hibernate Вставить греческие символы в Oracle
UPDATE конфигурации множество CLOB = UNISTR ('\ 03A6')
Однако она не при попытке вставить символ через мое приложение, используя спящий режим. При отладке я обнаружил, что строка перед вставкой - '\ u03A6'. После вставки я вижу его как ¿.
Может кто-нибудь, пожалуйста, помогите мне, как я могу это решить? Как я могу использовать UNISTR?
PN: Я не использую никаких родных sqls или hqls. Я использую объект объекта таблицы.
Edit:
Hibernate версия используется 3.5.6. Невозможно изменить версию, так как в ней так много других плагинов. Таким образом, не может использовать @Nationalized или @type (тип = «org.hibernate.type.NClobType») на моем поле в спящем Entity
Возможно, символ сохранен правильно в базе данных, но он не отображается правильно на вашем экране (поскольку ваш сеанс, а не база данных, использует набор символов, который не поддерживает греческие буквы). Чтобы узнать, что хранится, вы можете использовать функцию DUMP. Например, 'select UNISTR ('\ 03A6'), dump (UNISTR ('\ 03A6')) из double' показывает мне букву φ (потому что мой набор символов моего интерфейса поддерживает ее) и' Typ = 1 Len = 2 : 3,166' - описание двухбайтового символа Юникода. Используйте функцию DUMP для проверки правильности сохранения символа в базе данных. – mathguy
Не совсем. Я вижу ¿, хранящийся в БД. – Maz
Не уверен, что вы имеете в виду. База данных не хранит странные символы, она хранит только байты (нули и единицы). Они интерпретируются как любые символы вашего front-end, независимо от того, что вы используете. Вы никогда не увидите литерала, хранящегося в БД. Вы попробовали то, что я предложил? Это займет несколько секунд. – mathguy