Hibernate在Oracle中插入希腊字符
我需要在Oracle中插入希腊字符,如“ν”。我现有的数据库结构不支持它。在调查中,我发现了各种解决方案,并采用了使用NCLOB而不是CLOB的解决方案。当我使用unicode(03A6)表示“ν”,并在SQL编辑器中使用UNISTR函数插入时,它工作得非常好。就像下面这个 更新配置集CLOB=UNISTR'\03A6' 但是,当我尝试使用hibernate通过应用程序插入角色时,它失败了。调试时,我发现插入前的字符串是“\u03A6”。插入后,我将其视为 有人能帮我解决这个问题吗?如何使用UNISTR 请注意:我不使用任何本机SQL或HQL。我使用表的实体对象 编辑:Hibernate在Oracle中插入希腊字符,oracle,hibernate,special-characters,Oracle,Hibernate,Special Characters,我需要在Oracle中插入希腊字符,如“ν”。我现有的数据库结构不支持它。在调查中,我发现了各种解决方案,并采用了使用NCLOB而不是CLOB的解决方案。当我使用unicode(03A6)表示“ν”,并在SQL编辑器中使用UNISTR函数插入时,它工作得非常好。就像下面这个 更新配置集CLOB=UNISTR'\03A6' 但是,当我尝试使用hibernate通过应用程序插入角色时,它失败了。调试时,我发现插入前的字符串是“\u03A6”。插入后,我将其视为 有人能帮我解决这个问题吗?如何使用UN
使用的Hibernate版本是3.5.6。无法更改版本,因为有太多其他插件依赖于此。因此,无法在hibernate实体中的我的字段上使用@Nationalized或@Typetype=org.hibernate.type.nclbtype在绞尽脑汁阅读不同的文章并尝试了这么多选项后,我最终决定稍微调整我的代码以在Java中处理这个问题,而不是通过hibernate或Oracle DB 在插入数据库之前,我在字符串中标识unicode字符,并将其格式化为在开头和结尾追加&x;最后。这个编码的字符串将与它的实际unicode一起显示在符合UTF-8的UI JSP、HTML中。下面是代码
Formatter formatter = new Formatter();
for (char c : text.toCharArray()) {
if (CharUtils.isAscii(c)) {
formatter.format("%c", c);
} else {
formatter.format("&#x%04x;", (int) c);
}
}
String result = formatter.toString();
例:
将格式化为
测试=ABC和xf06c;DEF&xf06c;GHI
当在UI甚至word文档中呈现此字符串时,它显示为
ABC DEFGHI
我用各种unicode字符进行了尝试,效果很好。字符可能正确地存储在数据库中,但无法正确显示在屏幕上,因为会话(而不是数据库)使用的字符集不支持希腊字母。要了解存储的内容,可以使用DUMP函数。例如,从dual中选择UNISTR'\03A6',dumpUNISTR'\03A6'向我显示字母П,因为我的前端字符集支持它,并且Typ=1 Len=2:3166-双字节Unicode字符的描述。使用DUMP函数查看字符是否正确存储在数据库中。不完全正确。我能看到数据库中存储的?,不知道你的意思。数据库不存储奇怪的符号,它只存储字节0和1。它们被前端解释为任何符号,无论您使用什么。你永远看不到数据库中存储的文字。你试过我的建议了吗?应该需要几秒钟。我尝试了UNISTR查询,得到了与您相同的结果,即Φ和Typ=1 Len=2:3166。是的,我可以在SQL Developer和IntelliJ编辑器的表格中看到。好的-你看到了吗?在表格中是正确的表达方式。这就是SQLDeveloper向您展示的内容。在数据库中,您具有使用DUMP检查的正确字符。下一个问题:运行SQL Developer的机器上的操作系统是什么?
String test = "ABC \uf06c DEF \uf06cGHI";