Oracle中大小写敏感的问题

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

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

近期更新的文章:

尝试一下OSWatch

数据库hang等待链分析利器

会议交流的一些杂谈

NULL判断对SQL的影响

曾经运维生涯中的几个“最”

文章分类和索引:

公众号700篇文章分类和索引

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值