我正在与Oracle一起使用的应用程序似乎存在字符问题,我在下面运行了查询以检查CHARACTERSET。
SELECT * FROM nls_session_parameters WHERE PARAMETER='NLS_CHARACTERSET';
SELECT * FROM nls_database_parameters WHERE PARAMETER='NLS_CHARACTERSET';
来自nls_database_parameters的第二个查询返回AL32UTF8。
但是第一个查询似乎返回None。
我已经读到nls_session_parameters优先于nls_database_parameters,但是在这种情况下,似乎没有设置任何值,它会退回到nls_database_parameters] ,或者是否需要配置某些内容来设置nls_session_parameters。
谢谢您对此的任何投入。
NLS_CHARACTERSET
是数据库使用的字符集。您的会话(即客户端)不存储任何内容,因此NLS_CHARACTERSET
不存在。
我假设您正在寻找NLS_LANG
,它告诉数据库客户端使用哪个字符集。您无法从任何数据库视图/表中查询NLS_LANG
,必须检查客户端中的设置。您只能在客户端设置NLS_LANG
,而不能在数据库设置。
注意,某些客户端(例如,基于Java JDBC的客户端)不使用NLS_LANG
设置,它们使用不同的全球化机制。
NLS_SESSION_PARAMETERS显示用于查询视图的会话的NLS参数及其值。它不显示有关字符集的信息。
基本上NLS_SESSION_PARAMETERS
将没有名为NLS_CHARACTERSET
的参数。
字符集是语言环境的一部分,由NLS_LANG
的值确定。
NLS_LANG在UNIX平台上设置为环境变量。在Windows平台上的注册表中设置了NLS_LANG。
因此检查NLS_LANG
。同样,此信息在启动时由客户端应用程序拾取,并且无法从内部进行更改。