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數據庫的應用來說,避免程序中使用“”雙引號標記對象大小寫,這是在開發中應該遵守的一條準則。但是,其他一些數據庫,有的是大小寫敏感,有的習慣使用大小寫混合定義,當做這些數據庫遷移的時候,就得注意程序中,大小寫的問題,避免帶來不必要的麻煩。
本文轉載自微信公眾號「bisal的個人雜貨鋪」,作者bisal。轉載本文請聯系bisal的個人雜貨鋪公眾號。