Oracle SQL Developer环境编码

时间:2012-03-09 09:15:44

标签: oracle encoding

我有Oracle SQL Developer(3.1.07),我正在尝试使用WE8ISO8859P1编码的数据库:

SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';

我在保存包含unicode符号的包时遇到问题。当我打开以前保存的包时,所有unicode符号都转为'¿'

我需要更改哪些设置才能使SQL Developer保留这些符号? 我试图将环境编码设置为'ISO-8859-15'和其他一些编码,但它无济于事。

4 个答案:

答案 0 :(得分:1)

如果您的数据库将文本编码为非unicode单字节编码(例如ISO-8859),则字符表中不存在的任何符号都将被视为无效并由占位符替换。你不能回过头来,信息就会丢失。

这通常可以在存储数据时解决,但对于源代码,您无法控制Oracle对字符串进行编码的方式。

如果您的数据库配置为使用此类编码方案,则可能不应编写违反其规则的代码。

答案 1 :(得分:0)

也许你可能需要这个字符集迁移

http://docs.oracle.com/cd/B10501_01/server.920/a96529/ch10.htm#1656

在Oracle的文档

答案 2 :(得分:0)

至少要在sql developer中打开PKG,你可以快速尝试看看它是否有效: -

将SQL Developer'encoding'更改为'unicode-utf-8',现在默认为更高版本。

最终,您需要将数据库字符集迁移到“AL32UTF8”,以避免由于此字符集而导致的其他问题(如数据)。

答案 3 :(得分:0)

如果查看USER_SOURCE,您将看到由数据库存储/解释的源代码将位于VARCHAR2列中,因此请使用数据库字符集。因此,您的源代码需要在WE8ISO8859P1中。

理论上,如果客户端和数据库使用相同的字符集,那么数据库不会尝试进行任何字符集转换,您可以潜入数据库认为的字节序列WE8ISO8859P1但在unicode中会有意义。但是,在某些时候,有人会使用错误的客户端,它会破坏。

您不需要代码中的标识符等unicode,因此我假设它是字符串文字。最好将它们存储在一个表(NVARCHAR2列)中,然后将它们选择到代码中而不是对它们进行硬编码。如果不可能,您可以使用UNISTR并硬编码相关的十六进制值。