Oracle中大小写敏感的问题

数据库 Oracle
上周组内例会,提到不同数据库中大小写敏感的问题,问题很小,但是如果不注意,尤其是开发不规范的场景,很容易进坑。

[[405529]]

上周组内例会,提到不同数据库中大小写敏感的问题,问题很小,但是如果不注意,尤其是开发不规范的场景,很容易进坑。

首先,我们看下Oracle中对大小写的处理。

例如用小写test1创建,但我们在user_objects中根据小写test1不能找到记录,根据大写的TEST1,才可以找到,

  1. SQL> create table test1(id number); 
  2.  
  3. Table created. 
  4.  
  5. SQL> select object_name from user_objects where object_name='test1';   
  6.  
  7. no rows selected 
  8.  
  9. SQL> select object_name from user_objects where object_name='TEST1'
  10.  
  11. OBJECT_NAME 
  12. -------------------------------------------------------------------------------- 
  13. TEST1 

这次我们使用双引号标记的小写test2,和上面正好相反,使用大写的TEST2不能找到记录,但是用小写test2可以找到,

  1. SQL> create table "test2"(id number); 
  2.  
  3. Table created. 
  4.  
  5. SQL> select object_name from user_objects where object_name='TEST2'
  6.  
  7. no rows selected 
  8.  
  9. SQL> select object_name from user_objects where object_name='test2'
  10.  
  11. OBJECT_NAME 
  12. -------------------------------------------------------------------------------- 
  13. test2 

要说大小写敏感,这个参数算一个,sec_case_sensitive_logon,他会控制用户密码的大小写敏感不敏感,11g中默认为ture,密码大小写敏感,如果改为false,则为不敏感,

  1. SQL> show parameter sensitive 
  2.  
  3. NAME                                 TYPE        VALUE 
  4. ------------------------------------ ----------- ------------------------------ 
  5. sec_case_sensitive_logon             boolean     TRUE 

如果用orapwd创建密码文件,其中有个参数ignorecase可以指定密码大小写敏感,作用和上述相同,

除此之外,其他的对象,字段、视图、索引、序列等,都是大小写不敏感的。

如果我们在开发代码中不使用“”双引号特意标记对象的大小写,在和数据库交互的时候,就都会自动转成大写,当然都特意写成大写,一样的效果。至于小写,在数据库引擎中转成大写的这个操作,多少有些消耗,但是,在当前主流的硬件环境下,我认为几乎可以忽略。

因此对使用Oracle数据库的应用来说,避免程序中使用“”双引号标记对象大小写,这是在开发中应该遵守的一条准则。但是,其他一些数据库,有的是大小写敏感,有的习惯使用大小写混合定义,当做这些数据库迁移的时候,就得注意程序中,大小写的问题,避免带来不必要的麻烦。

本文转载自微信公众号「bisal的个人杂货铺」,作者bisal。转载本文请联系bisal的个人杂货铺公众号。

 

 

责任编辑:武晓燕 来源: bisal的个人杂货铺
相关推荐

2010-06-07 13:00:34

MySQL数据库

2010-11-25 16:09:58

mysql查询大小写

2011-05-07 10:47:29

Oracle大小写

2022-11-10 08:40:56

OracleMySQL

2010-10-27 17:16:51

Oracle查询

2011-03-30 10:05:04

Mysql数据库名表名

2010-11-23 13:42:18

mysql数据库大小写

2021-06-04 10:30:41

MySQL表名大小

2010-05-11 13:25:18

Mysql大小写

2017-06-12 16:10:05

MySQL表名

2010-11-26 11:40:19

MySQL字符串大小写

2010-03-04 14:02:51

Python大小写

2010-10-11 15:47:46

MySQL字符串大小写

2009-06-21 13:44:21

LinuxTr大小写转换

2020-10-15 17:55:37

Linux命令行大小写转换

2011-08-30 10:10:30

UbuntuLinuxMySQL

2010-05-26 15:24:09

MySQL字符串

2020-03-11 10:45:36

Linux命令Linux大小写

2020-10-14 07:46:46

Linux大小写转换

2010-03-25 10:39:26

Python代码
点赞
收藏

51CTO技术栈公众号