Oracle中大小写敏感的问题

发表于:2021-7-02 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:bisal    来源:bisal的个人杂货铺

  上周组内例会,提到不同数据库中大小写敏感的问题,问题很小,但是如果不注意,尤其是开发不规范的场景,很容易进坑。
  首先,我们看下Oracle中对大小写的处理。
  例如用小写test1创建,但我们在user_objects中根据小写test1不能找到记录,根据大写的TEST1,才可以找到。
  SQL> create table test1(id number); 
   
  Table created. 
   
  SQL> select object_name from user_objects where object_name='test1';   
   
  no rows selected 
   
  SQL> select object_name from user_objects where object_name='TEST1'; 
   
  OBJECT_NAME 
  -------------------------------------------------------------------------------- 
  TEST1 
  这次我们使用双引号标记的小写test2,和上面正好相反,使用大写的TEST2不能找到记录,但是用小写test2可以找到。
  SQL> create table "test2"(id number); 
   
  Table created. 
   
  SQL> select object_name from user_objects where object_name='TEST2'; 
   
  no rows selected 
   
  SQL> select object_name from user_objects where object_name='test2'; 
   
  OBJECT_NAME 
  -------------------------------------------------------------------------------- 
  test2 
  要说大小写敏感,这个参数算一个,sec_case_sensitive_logon,他会控制用户密码的大小写敏感不敏感,11g中默认为ture,密码大小写敏感,如果改为false,则为不敏感。
  SQL> show parameter sensitive 
   
  NAME                                 TYPE        VALUE 
  ------------------------------------ ----------- ------------------------------ 
  sec_case_sensitive_logon             boolean     TRUE 
  如果用orapwd创建密码文件,其中有个参数ignorecase可以指定密码大小写敏感,作用和上述相同。
  除此之外,其他的对象,字段、视图、索引、序列等,都是大小写不敏感的。
  如果我们在开发代码中不使用“”双引号特意标记对象的大小写,在和数据库交互的时候,就都会自动转成大写,当然都特意写成大写,一样的效果。至于小写,在数据库引擎中转成大写的这个操作,多少有些消耗,但是,在当前主流的硬件环境下,我认为几乎可以忽略。
  因此对使用Oracle数据库的应用来说,避免程序中使用“”双引号标记对象大小写,这是在开发中应该遵守的一条准则。但是,其他一些数据库,有的是大小写敏感,有的习惯使用大小写混合定义,当做这些数据库迁移的时候,就得注意程序中,大小写的问题,避免带来不必要的麻烦。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号