为Oracle选择NLS_LANG

dig*_*dug 2 oracle globalization encoding utf-8 internationalization

根据该网站, http://www.dba-oracle.com/t_nls_lang.htm

即使数据库和客户端都使用相同的字符集(AL32UTF8),也可能会出现问题.我无法理解这是如何可能的.从网站引用:

例如,假设数据库字符集是AL32UTF8,客户端是英语Windows操作系统,客户端上的NLS_LANG设置是AL32UTF8.进入数据库的数据在WE8MSWIN1252中编码,并且不会转换为AL32UTF8数据,因为客户端上的NLS_LANG设置与数据库字符集匹配.因此,Oracle假定不需要转换,并且将无效数据输入数据库.

当客户端中的编码是AL32UTF8时,如何将数据作为WE8MSIN1252进入数据库?

wer*_*dle 6

因为OS本身使用其他字符集(在本例中为WE8MSIN1252).但由于NLS_LANG(在客户端上)设置为AL32UTF8,因此Oracle不知道这一点.Oracle始终在NLS_LANG中使用值并忽略系统设置,而(几乎)所有其他软件都使用操作系统设置.

因此,要解决此问题,本地(客户端)NLS_LANG必须与OS字符集相同.或者(其他选项)在客户端上运行的软件必须自行重新编码字符.