-1

我们正在 Oracle Database 19.3 中尝试以下请求,结果就像忽略了区分大小写一样。

select 1 from dual where regexp_like('CHIEN', '[a-z]+', 'c');

请求的结果是

1

即使:

ALTER SESSION SET NLS_COMP=ANSI;
ALTER SESSION SET NLS_SORT=GERMAN_AI;

我们认为这是来自 NLS 参数,但我们没有找到哪个参数。

我们有这些参数:

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_calendar                         string      GREGORIAN
nls_comp                             string      BINARY
nls_currency                         string      €
nls_date_format                      string      DD/MM/RR
nls_date_language                    string      FRENCH
nls_dual_currency                    string      €
nls_iso_currency                     string      FRANCE
nls_language                         string      FRENCH
nls_length_semantics                 string      BYTE
nls_nchar_conv_excp                  string      FALSE
nls_numeric_characters               string      ,

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_sort                             string      FRENCH
nls_territory                        string      FRANCE
nls_time_format                      string      HH24:MI:SSXFF
nls_timestamp_format                 string      DD/MM/RR HH24:MI:SSXFF
nls_timestamp_tz_format              string      DD/MM/RR HH24:MI:SSXFF TZR
nls_time_tz_format                   string      HH24:MI:SSXFF TZR

我们的 NLS_LANG 设置为 French_France.AL32UTF8

4

1 回答 1

1

最后我找到了解决方案。

问题出在 NLS_SORT=FRENCH (或任何语言排序)

NLS_SORT=法语=> AaBbCcDdEeFfGgHhIiJjKkLlMmNn .... Z

当我们查找正则表达式 [az] 时,我们包括 BCDE ... Z

解决方案是设置NLS_SORT=BINARY

就我而言,我设置了环境变量 NLS_SORT=BINARY。否则,Oracle 将采用与 NLS_LANG 对应的默认 NLS_SORT 值。

于 2021-06-09T06:59:10.020 回答