【问题标题】:NLS_CHARACTERSET in nls_session_parameters returns Nonenls_session_parameters 中的 NLS_CHARACTERSET 返回 None
【发布时间】:2020-05-01 22:15:18
【问题描述】:
我与 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。
感谢您对此的任何意见。
【问题讨论】:
标签:
oracle
nscharacterset
character-set
nls-lang
【解决方案1】:
来自Oracle Docs
NLS_SESSION_PARAMETERS 显示查询视图的会话的 NLS 参数及其值。它不显示有关字符集的信息。
基本上NLS_SESSION_PARAMETERS 不会有名为NLS_CHARACTERSET 的参数。
字符集是语言环境的一部分,由NLS_LANG的值决定。
NLS_LANG 在 UNIX 平台上设置为环境变量。 NLS_LANG 在 Windows 平台的注册表中设置。
因此检查NLS_LANG。此外,此信息由客户端应用程序在启动时获取,并且无法从内部更改。
【解决方案2】:
NLS_CHARACTERSET 是数据库使用的字符集。您的会话(即客户端)不存储任何内容,因此 NLS_CHARACTERSET 不存在。
我假设您正在寻找NLS_LANG,它告诉数据库客户端使用哪个字符集。您不能从任何数据库视图/表中查询NLS_LANG,您必须检查客户端中的设置。 NLS_LANG 只能在客户端设置,不能在数据库端设置。
请注意,某些客户端(例如基于 Java JDBC 的客户端)不使用 NLS_LANG 设置,它们使用不同的全球化机制。