【问题标题】:Oracle Case Insensitive settings [closed]Oracle 不区分大小写设置 [关闭]
【发布时间】:2014-10-18 13:39:54
【问题描述】:

我正在尝试设置不区分大小写的参数,例如下面的命令

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

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

但是当它不起作用时。 有人可以帮我解决这个问题吗?

我键入第一个 ALTER SESSION 它仅适用于 SQL Developer,但仅适用于第一次。当我打开一个新连接时它不起作用。

我输入第二个,ALTER SESSION SET NLS_COMP=LINGUISTIC,在设置中显示 NLS_COMP=LINGUISTIC;但是当打开新连接时它不再起作用。 我的意思是当我用小写搜索时

SELECT * 
FROM users 
WHERE username like 'conan'

而我的usernameCONAN 它找不到

【问题讨论】:

  • “不起作用”是什么意思?
  • 您只是在更改会话,因此如果您打开一个新会话,它将无法正常工作,不...
  • 会话和连接之间似乎有点混淆。连接是客户端和服务器之间的实际连接(通常是 TCP/IP 上的套接字)。客户端使用它来与服务器通信,服务器也使用它来响应客户端的请求。会话是服务器上为该连接创建的用于服务客户端的进程(或线程)。这会从连接中读取客户端的请求,执行/服务请求,然后通过连接将请求响应给客户端。

标签: java oracle hibernate case-sensitive case-insensitive


【解决方案1】:

更改会话集 NLS_COMP=LINGUISTIC;

更改会话集 NLS_SORT=BINARY_CI;

该语句只会影响您当前的会话,当您打开一个新会话时,上一个会话中的先前更改会话不会影响新会话。如果您想让所有会话不区分大小写,请使用 AFTER LOGON TRIGGER 并使用动态 sql 发出相同的语句。

例如,

CREATE OR REPLACE TRIGGER case_insensitive_trg
AFTER LOGON ON SCHEMA
BEGIN
  execute immediate 'alter session set NLS_SORT=BINARY_CI';
  execute immediate 'alter session set NLS_COMP=LINGUISTIC';
END;
/

有关不区分大小写的排序和比较的详细信息,请阅读Oracle – Case Insensitive Sorts & Compares

关于,系统级别,

ALTER SYSTEM SET NLS_COMP=LINGUISTIC SCOPE SPFILE;
ALTER SYSTEM SET NLS_SORT=BINARY_AI SCOPE SPFILE;

您当然可以为所欲为,当然这是您的数据库。但是,我不建议在系统级别做这样的事情。在系统级别上这是一种过度杀伤力,并且对性能问题表示不必要的欢迎。

更新:会话和连接之间的混淆

连接是实际连接(通常是 TCP/IP 上的套接字) 客户端和服务器之间。它被客户端用于 与服务器通信,并由服务器响应 客户的要求。

会话是服务器上的进程(或线程) 为该连接创建,以服务客户端。这读取 来自连接的客户端请求,执行/服务请求, 然后通过连接响应客户端的请求。

因此,会话读取并响应客户端的请求通过连接。

【讨论】:

  • 我在阅读 ALTER SESSION 的文档时遇到了一些奇怪的事情。它说 “使用 ALTER SESSION 语句来设置或修改任何影响您的 连接 到数据库的条件或参数。” 就我自己而言,我认为connection 作为到 DB 的物理路径,而 session 作为通过连接建立以查询 DB。对于共享服务器,您可能在一个连接上拥有多个会话。那么ALTER SESSION 会改变session 还是connection
  • 根据我的经验,我也在这里分享lalitkumarb.wordpress.com/2014/01/22/…,它将改变当前会话执行alter session 语句。如果打开一个新会话,它不会受到影响。
  • 我也几乎可以肯定这一点,但是通过使用“连接”这个词而不是“会话”,文档在我的脑海中插入了一些疑问。
  • SQL Developer 中的连接词更加混乱,开发人员发现它与会话同义。我已经编辑了我的答案并使我的陈述更加明确。
  • 明确地说,连接是客户端和服务器之间的实际连接(通常是 TCP/IP 上的套接字)。客户端使用它来与服务器通信,服务器也使用它来响应客户端的请求。会话是服务器上为该连接创建的用于服务客户端的进程(或线程)。这会从连接中读取客户端的请求,执行/服务请求,然后通过连接将请求响应给客户端。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 1970-01-01
  • 2017-10-19
  • 1970-01-01
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多