Jer*_*oen 5 oracle sorting oracle-12c natural-sort
我们最近使用较新版本的 Oracle (12c) 而不是 11r2 部署了一个新环境。
直到最近我才注意到我返回的数据的排序方式不同。
而不是有小写字母、大写字母和数字......(在 Oracle 11r2 上)我以相反的方式对我的数据进行排序:数字、大写字母、小写字母(Oracle 12c)
这确实让查询数据库的各种应用程序的最终用户感到困惑。我需要检查/比较哪些设置才能在 Oracle 12c 中解决此问题?
我提到的查询有一个 order by 子句。 编辑 这些参数的设置在两个环境上是相同的:
NLS_SORT 类型:字符串值:
nls_language 类型:字符串值:DUTCH
所以 NLS_SORT 没有值,那么默认值是多少?
@菲尔
select * from NLS_INSTANCE_PARAMETERS;
Parameter Oracle11r2 Oracle12c
NLS_LANGUAGE DUTCH DUTCH
NLS_TERRITORY THE NETHERLANDS THE NETHERLANDS
NLS_SORT
NLS_DATE_LANGUAGE
NLS_DATE_FORMAT
NLS_CURRENCY
NLS_NUMERIC_CHARACTERS
NLS_ISO_CURRENCY
NLS_CALENDAR
NLS_TIME_FORMAT
NLS_TIMESTAMP_FORMAT
NLS_TIME_TZ_FORMAT
NLS_TIMESTAMP_TZ_FORMAT
NLS_DUAL_CURRENCY
NLS_COMP BINARY BINARY
NLS_LENGTH_SEMANTICS BYTE CHAR
NLS_NCHAR_CONV_EXCP FALSE FALSE
select * from NLS_SESSION_PARAMETERS;
these are the same as my NLS settings in Oracle SQL developer, so not very relevant I guess...
select * from NLS_DATABASE_PARAMETERS;
Run Code Online (Sandbox Code Playgroud)
这些都是一样的,只有 NLS_RDBMS_VERSION 不同
所以只有 NLS_LENGTH_SEMANTICS 不同。有没有办法检查其他会话的值?
小智 5
NLS_LANGUAGE 确定排序顺序。例如,如果您已从 FRENCH 变为默认的 AMERICAN,您会发现您描述的排序顺序有所不同。设置默认 NLS_LANGUAGE 执行
alter system set nls_language ='FRENCH' scope=spfile;
Run Code Online (Sandbox Code Playgroud)
并反弹实例。您始终可以在会话中使用
alter session set nls_language = 'FRENCH';
Run Code Online (Sandbox Code Playgroud)
反弹实例就是重新启动它。在更改某些系统参数(如 NLS_LANGUAGE)时,您需要这样做。如果您只更改当前会话中的参数,则不需要重新启动实例。
要检查参数值就可以了,就像菲尔所说,查询NLS_DATABASE_PARAMETERS
,NLS_INSTANCE_PARAMETERS
和NLS_SESSION_PARAMETERS
。要检查当前会话中的设置,您还可以运行show parameter nls_language
.
归档时间: |
|
查看次数: |
3228 次 |
最近记录: |