0

我与 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。_

感谢您对此的任何意见。

4

2 回答 2

1

来自Oracle 文档

NLS_SESSION_PARAMETERS 显示查询视图的会话的 NLS 参数及其值。它不显示有关字符集的信息。

基本上NLS_SESSION_PARAMETERS不会有 Parameter 调用NLS_CHARACTERSET

字符集是语言环境的一部分,由 的值决定NLS_LANG

NLS_LANG 在 UNIX 平台上设置为环境变量。NLS_LANG 在 Windows 平台上的注册表中设置。

因此检查NLS_LANG. 此外,此信息由客户端应用程序在启动时获取,并且不能从内部更改。

于 2020-01-15T07:16:14.680 回答
0

NLS_CHARACTERSET数据库使用的字符集。您的会话(即客户端)不存储任何内容,因此NLS_CHARACTERSET不存在。

我假设您正在寻找NLS_LANGwhich 告诉数据库客户端使用哪个字符集。您不能NLS_LANG从任何数据库视图/表中查询,您必须检查客户端中的设置。您NLS_LANG只能在客户端设置,不能在数据库端设置。

注意,一些客户端(例如基于 Java JDBC 的客户端)不使用NLS_LANG设置,它们使用不同的全球化机制。

于 2020-01-15T07:11:22.947 回答