我需要在甲骨文中插入希腊字符,如'ϕ‘。我现有的DB结构不支持它。在调查的基础上,找到了各种解决方案,采用了NCLOB代替CLOB的解决方案。当我使用unicode ( 03A6 )表示“ϕ”,并使用SQL编辑器中的联阿比to函数插入时,它的工作非常好。就像下面的那个。
更新配置集CLOB =(‘\03A6’)
但是,当我使用hibernate尝试通过我的应用程序插入字符时,它就失败了。在调试时,我发现插入前的字符串是'\u03A6‘。在插入后,我认为它是。
有人能帮我解决这个问题吗?如何利用联阿安全部队?
PN:我不使用任何本地sqls或hql。我使用表的实体对象。
编辑:
使用的Hibernate版本为3.5.6。无法更改版本,因为有那么多其他插件依赖于此。因此,不能在Hibernate实体中的我的字段中使用@Nationalized或。
发布于 2017-01-20 05:31:46
在绞尽脑汁研究不同的文章并尝试了这么多选项之后,我终于决定稍微调整一下代码,以便用Java来处理这个问题,而不是通过hibernate或Oracle DB。
在插入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";
此字符串在UI中呈现时(甚至在word文档中)显示为
ABC DEF GHI
我用不同的unicode字符试了一下,它运行得很好。
https://stackoverflow.com/questions/41625586
复制相似问题