程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> 關於Oracle數據庫 >> Oracle字符值的比較和儲存

Oracle字符值的比較和儲存

編輯:關於Oracle數據庫

以前對Oracle字符值的比較和儲存沒有弄得很清楚,直到最近寫程序碰到了,才認真去實踐驗證了一下,結果還真的發現自己的一些錯誤熟悉。

對於char和varchar2類型數據庫列值的儲存,以前一直以為:

1、char列按輸入的值儲存,假如值長度不夠char列的長度,則在後面補上空格char(32)

2、varchar2列按輸入的值儲存,假如值長度不夠varchar2列的長度,後面不補空格 上面2點都是對的,不過下面這一點就不對了

3、即使輸入的值後面含空格,varchar2列在儲存時也會去掉,也就是說varchar2列後一定不含空格

SQL> create table testyyw(col1 char(2),col2 varchar2(2)); Table created SQL> insert into testyyw values ('x','x'); 1 row inserted SQL> insert into testyyw values ('x ','x '); 1 row inserted SQL> select dump(col1),dump(col2) from testyyw; DUMP(COL1) DUMP(COL2) ------------------------------------------------------------------------ Typ=96 Len=2: 120,32 Typ=1 Len=1: 120 Typ=96 Len=2: 120,32 Typ=1 Len=2: 120,32


用dump函數看出來了,2行在數據庫中的儲存方式不一樣的,varchar2列後面也有空格

在網上查了下Oracle字符的比較,查到了如下結果 關於字符值的比較, Oracle使用以下兩種比較規則:

1、空格補齊比較語法

對於類型CHAR、NCHAR、text literals、USER函數值, 在進行比較時, 先在較短的那個 字符串後補上空格以使長度相等, 然後再進行比較. 所以, 'ab'='ab '

2、非補齊比較語法

對於類型VARCHAR2、NVARCHAR2, 則不用補齊, 直接進行比較; 而對於1和2的類型作比較的情況,我的試驗結果都是原值直接比較,也就是按2類的方法來

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved