我有Oracle SQL Developer(3.1.07),我正在尝试使用WE8ISO8859P1
编码的数据库:
SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
我在保存包含unicode符号的包时遇到问题。当我打开以前保存的包时,所有unicode符号都转为'¿'
。
我需要更改哪些设置才能使SQL Developer保留这些符号?
我试图将环境编码设置为'ISO-8859-15'
和其他一些编码,但它无济于事。
答案 0 :(得分:1)
如果您的数据库将文本编码为非unicode单字节编码(例如ISO-8859),则字符表中不存在的任何符号都将被视为无效并由占位符替换。你不能回过头来,信息就会丢失。
这通常可以在存储数据时解决,但对于源代码,您无法控制Oracle对字符串进行编码的方式。
如果您的数据库配置为使用此类编码方案,则可能不应编写违反其规则的代码。
答案 1 :(得分:0)
答案 2 :(得分:0)
至少要在sql developer中打开PKG,你可以快速尝试看看它是否有效: -
将SQL Developer'encoding'更改为'unicode-utf-8',现在默认为更高版本。
最终,您需要将数据库字符集迁移到“AL32UTF8”,以避免由于此字符集而导致的其他问题(如数据)。
答案 3 :(得分:0)
如果查看USER_SOURCE,您将看到由数据库存储/解释的源代码将位于VARCHAR2列中,因此请使用数据库字符集。因此,您的源代码需要在WE8ISO8859P1中。
理论上,如果客户端和数据库使用相同的字符集,那么数据库不会尝试进行任何字符集转换,您可以潜入数据库认为的字节序列WE8ISO8859P1但在unicode中会有意义。但是,在某些时候,有人会使用错误的客户端,它会破坏。
您不需要代码中的标识符等unicode,因此我假设它是字符串文字。最好将它们存储在一个表(NVARCHAR2列)中,然后将它们选择到代码中而不是对它们进行硬编码。如果不可能,您可以使用UNISTR并硬编码相关的十六进制值。