Oracle 11g持久保存阿拉伯字符

时间:2013-08-27 09:01:55

标签: java jpa oracle11g arabic


我正在尝试将阿拉伯字符保存到Oracle 11g数据库中。当我坚持使用阿拉伯字符串时,它们会成功保存,但在数据库中它们会显示为问号???????。

我搜索并发现问题可能与数据库编码有关,但我认为可能不是这样,因为我能够从SQLDeveloper编写阿拉伯字符串并提交DB,它在DB表中正确显示。此外,当我检索该字段并将其显示在屏幕上时,它会正确显示。

因此,我得出结论,DB识别阿拉伯语,那里没有问题。我尝试设置客户端/服务器区域语言设置仍然没有解决问题。 阅读this帖子并尝试其建议后,我发现问题可能在于持久层,它无法正确处理阿拉伯字符。解决方法是什么?

我不确定这是一个多余的问题,但我很绝望。任何帮助/建议表示赞赏。

我正在使用的系统:
服务器:Oracle Thin 11g
IDE:带有JSF 1.2的IBM WebSphere Integration Developer 注意:还是初学者。

修改

插入代码:

       String a = "اشتغل";
       byte[] b = a.getBytes("UTF-8");
       String c = new String(b,"UTF-8");
       localLgInst.setBdStatus(c);
       System.out.println("status " + localLgInst.getBdStatus()); 
       entityManager.persist(localLgInst);
       entityManager.flush();

localLgInst是实体的实例。目前我正在将字符串硬编码。系统输出在IDE的控制台中打印字符串,但也是???????。

2 个答案:

答案 0 :(得分:0)

尝试将阿拉伯语文本写入NVARCHAR列

答案 1 :(得分:0)

一个可能的错误是代码中某处丢失了unicode。您必须支持从字符串创建到保存数据库中的字符串的Unicode / UTF8。

阿拉伯字符应包含在UTF8字符集中,无需使用UTF16

使用bytes支持UTF8,String对象没有编码。请在此处查看说明:https://stackoverflow.com/a/5729834/891479

对于字符串/字节UTF8处理,您可以查看: https://stackoverflow.com/a/88863/891479

如果您想更深入地了解主题:http://www.oracle.com/us/technologies/java/supplementary-142654.html