Oracle中的NLS_LANG参数

时间:2014-01-09 13:00:46

标签: sql oracle

我已经安装了带有chracterset POLISH_POLAND.EE8MSWIN1250的oracle。我可以检查select * from nls_database_parameters中的值,这些值是NLS_CHARACTERSET = EE8MSWIN1250和NLS_NCHAR_CHARACTERSET = AL16UTF16

对于sqlplus,我已将NLS_LANG设置为POLISH_POLAND.EE8PC852。现在我从sqlplus命令提示符运行一个sql文件,该文件保存在“没有BOM的UTF-8”中,因为它有抛光字符,它工作正常。但是如何检查数据库中的值是否正常?

我已经在SQL Developer中检查过(在将NLS_LANG设置为抛光之后)并且它们看起来不正确。请帮忙。

2 个答案:

答案 0 :(得分:4)

Oracle安装的字符集主要与定义存储的字符有关。如果您的客户端使用不同的编码,Oracle将自动转换它。如果我没有弄错的话,如果你试图保存一个不属于编码的字符,它甚至会警告你。

在您的情况下,主要的挑战是如何告诉SQLplus您的文本文件(SQL文件)的编码。由于它是UTF-8,您需要指定UTF-8值:

set NLS_LANG=.AL32UTF8

或者:

set NLS_LANG=POLISH_POLAND.UTF8

这应该可以解决问题。

请注意,SQLplus不支持带BOM的UTF-8。但目前这似乎与你无关。

答案 1 :(得分:3)

NLS_CHARACTERSET只定义了如何在Oracle数据库中保存二进制文本 - 因此也定义了可以存储在DB中的字符。

如果您的SQL文件是UTF-8,它肯定与PC852或1250文件不同。 将您的本地NLS_LANG更改为POLISH_POLAND.AL32UTF8,然后它应该可以正常工作。