【问题标题】:Unicode messages in oracle raise_application_errororacle raise_application_error 中的 Unicode 消息
【发布时间】:2016-05-24 18:03:46
【问题描述】:

我正在我的数据库中启用全球化支持
我已将字符集迁移到 UTF (AL16UTF16)。
迁移后,我可以将 Unicode 字符从 Java 传递到 Oracle 并存储在表的 NVARCHAR2 列中。我也可以从 DB 中检索并传递给 Java。

但是,如果我对 Unicode 数据执行 raise_application_error。它将错误消息发送到 java,如下所示

; nested exception is java.sql.SQLException: ORA-20001: ¿¿¿ ¿¿¿¿¿¿¿¿¿

谁能告诉我怎么了?以及如何在 java 中获取 Unicode 错误消息?

提前致谢。

【问题讨论】:

  • 请注意,NVARCHAR2 数据类型包含 国家字符集 中的字符串,可能与 数据库字符集 不同。如果不看代码,很难提供更具体的建议。
  • 感谢@collapsar 的回复。问题是字符集迁移没有正确完成。

标签: java oracle unicode


【解决方案1】:

问题是我已经使用以下步骤完成了字符集迁移,但它对我不起作用。

1.备份数据库。
2.运行CSSCAN命令。
3.以RESTRICT模式重启数据库。
4.运行CSALTER脚本。
5.重启数据库。

之后,我尝试使用以下步骤。

1.使用expdp命令备份数据库。
2.创建具有所需字符集的新数据库(Unicode AL32UTF8)。
3.将备份转储文件导入新创建的数据库。

就是这样。有效!

现在我不需要使用 NVARCHAR2 数据类型来存储 unicode 数据(VARCHAR2 本身存储 Unicode)。 raise_application_error 也可以正常工作(将带有 Unicode 数据的错误消息发送到 Java)。

谢谢。

【讨论】:

    猜你喜欢
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多