Oracle中大小寫敏感的問題
上周組內(nèi)例會,提到不同數(shù)據(jù)庫中大小寫敏感的問題,問題很小,但是如果不注意,尤其是開發(fā)不規(guī)范的場景,很容易進(jìn)坑。
首先,我們看下Oracle中對大小寫的處理。
例如用小寫test1創(chuàng)建,但我們在user_objects中根據(jù)小寫test1不能找到記錄,根據(jù)大寫的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
這次我們使用雙引號標(biāo)記的小寫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
要說大小寫敏感,這個參數(shù)算一個,sec_case_sensitive_logon,他會控制用戶密碼的大小寫敏感不敏感,11g中默認(rèn)為ture,密碼大小寫敏感,如果改為false,則為不敏感,
- SQL> show parameter sensitive
- NAME TYPE VALUE
- ------------------------------------ ----------- ------------------------------
- sec_case_sensitive_logon boolean TRUE
如果用orapwd創(chuàng)建密碼文件,其中有個參數(shù)ignorecase可以指定密碼大小寫敏感,作用和上述相同,
除此之外,其他的對象,字段、視圖、索引、序列等,都是大小寫不敏感的。
如果我們在開發(fā)代碼中不使用“”雙引號特意標(biāo)記對象的大小寫,在和數(shù)據(jù)庫交互的時候,就都會自動轉(zhuǎn)成大寫,當(dāng)然都特意寫成大寫,一樣的效果。至于小寫,在數(shù)據(jù)庫引擎中轉(zhuǎn)成大寫的這個操作,多少有些消耗,但是,在當(dāng)前主流的硬件環(huán)境下,我認(rèn)為幾乎可以忽略。
因此對使用Oracle數(shù)據(jù)庫的應(yīng)用來說,避免程序中使用“”雙引號標(biāo)記對象大小寫,這是在開發(fā)中應(yīng)該遵守的一條準(zhǔn)則。但是,其他一些數(shù)據(jù)庫,有的是大小寫敏感,有的習(xí)慣使用大小寫混合定義,當(dāng)做這些數(shù)據(jù)庫遷移的時候,就得注意程序中,大小寫的問題,避免帶來不必要的麻煩。
本文轉(zhuǎn)載自微信公眾號「bisal的個人雜貨鋪」,作者bisal。轉(zhuǎn)載本文請聯(lián)系bisal的個人雜貨鋪公眾號。