2014-12-22 120 views
3

这与使oracle排序不区分大小写有关。我所见到的大多数解决方案都提到会话参数设置如下:使Oracle排序不区分大小写?

ALTER SESSION SET NLS_COMP = LINGUISTIC; 
ALTER SESSION SET NLS_SORT = BINARY_CI; 

默认情况下,NLS_COMP是BINARY。

我发现,如果我只是将NLS_SORT设置为BINARY_CI而没有将NLS_COMP设置为LINGUISTIC,它仍然可以工作,即oracle的排序不区分大小写。设置NLS_COMP参数有什么好处吗?

+0

如果我想要一个在敏感搜索的情况下,我在搜索字段上使用上或下功能...说,除非你有数百个查询,需要区分大小写,否则UPPER(文本)像'%SEARCH_STRING%'' – thatjeffsmith

+0

'不敏感的排序,我只是按较低(字段)或nlssort(字段,'nls_sort = binary_ci')排序。否则,您为了简化代码而交易安全 - 大多数情况下依赖于nls的代码是等待发生的事故。在几年后,一些新的维护者或者一个新的软件将会设置自己的会话参数,并且你的查询只会默默地失败。 –

+0

我们确实有很多需要不区分大小写排序的查询。我们的要求是,如果我们按字符串排序,它必须不区分大小写 – Zenil

回答

3

NLS_COMPNLS_SORT有稍微不同的效果。顾名思义,NLS_COMP就是为了比较。顾名思义,NLS_SORT就是用于排序。将NLS_COMP设置为LINGUISTIC会导致比较遵循排序规则,导致比较使用NLS_SORT设置。当您尝试时可以看到差异:

SELECT 1 FROM DUAL WHERE 'A' = 'a'; 

NLS_COMP = BINARY的比较结果为false。用NLS_COMP = LINGUISTICNLS_SORT = BINARY_CI,比较结果是正确的。

是否应该设置取决于您希望从查询中获得的结果。

+1

好点。我读过的大多数文档并没有区分这个区别。引导我相信不区分大小写的排序需要设置两个参数 – Zenil