Hibernate将希腊字符插入Oracle

马兹

我要求将希腊字符(例如“ ϕ”)插入Oracle。我现有的数据库结构不支持它。在调查中发现了各种解决方案,我采用了使用NCLOB代替CLOB的解决方案。当我对ϕ使用Unicode 03A6并在SQL编辑器中使用UNISTR函数进行插入时,它的工作效果非常好。像下面的那个。

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

但是,当我尝试使用休眠方式通过应用程序插入字符时,操作失败。在调试时,我发现插入之前的字符串为'\ u03A6'。插入后,我将其视为¿。

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

PN:我不使用任何本地sql或hqls。我使用表的实体对象。

编辑:

使用的Hibernate版本是3.5.6。无法更改版本,因为还有很多其他插件与此相关。因此,我无法在休眠实体中的字段上使用@Nationalized@Type(type =“ org.hibernate.type.NClobType”)

马兹

在专心致志地撰写了不同的文章并尝试了许多选择之后,我最终决定对代码进行一些调整,以使用Java而不是通过休眠或Oracle DB来处理此问题。

在插入数据库之前,我先确定字符串中的unicode字符并将其格式化以附加&#x在开头和;结尾。将在符合UTF-8的UI(JSP,HTML)中显示此编码后的字符串及其实际的unicode。下面是代码。

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();

前任:

String test = "ABC \uf06c DEF \uf06cGHI";

将被格式化为

test = "ABC  DEF GHI";

在用户界面(甚至在Word文档中)呈现时,此字符串显示为

ABC  DEF GHI

我尝试了各种unicode字符,但效果很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章