Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate在Oracle中插入希腊字符_Oracle_Hibernate_Special Characters - Fatal编程技术网

Hibernate在Oracle中插入希腊字符

Hibernate在Oracle中插入希腊字符,oracle,hibernate,special-characters,Oracle,Hibernate,Special Characters,我需要在Oracle中插入希腊字符,如“ν”。我现有的数据库结构不支持它。在调查中,我发现了各种解决方案,并采用了使用NCLOB而不是CLOB的解决方案。当我使用unicode(03A6)表示“ν”,并在SQL编辑器中使用UNISTR函数插入时,它工作得非常好。就像下面这个 更新配置集CLOB=UNISTR'\03A6' 但是,当我尝试使用hibernate通过应用程序插入角色时,它失败了。调试时,我发现插入前的字符串是“\u03A6”。插入后,我将其视为 有人能帮我解决这个问题吗?如何使用UN

我需要在Oracle中插入希腊字符,如“ν”。我现有的数据库结构不支持它。在调查中,我发现了各种解决方案,并采用了使用NCLOB而不是CLOB的解决方案。当我使用unicode(03A6)表示“ν”,并在SQL编辑器中使用UNISTR函数插入时,它工作得非常好。就像下面这个

更新配置集CLOB=UNISTR'\03A6'

但是,当我尝试使用hibernate通过应用程序插入角色时,它失败了。调试时,我发现插入前的字符串是“\u03A6”。插入后,我将其视为

有人能帮我解决这个问题吗?如何使用UNISTR

请注意:我不使用任何本机SQL或HQL。我使用表的实体对象

编辑:


使用的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 DEFGHI


我用各种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";