Oracle之char和varchar區別及踩坑

2021-10-06 10:05:22 字數 971 閱讀 7229

char和varchar區別及踩坑

char與varchar2都是oracle的資料儲存格式。

char是定長的,varchar2是變長。都可以儲存字串。

同樣儲存乙個字元「a」

char:占用了10個字元(a佔乙個,另外9個使用空格占用)

varchar2只占用了 乙個字元(注意:乙個中文佔兩個字元/三個字元,英文佔乙個)。

乙個中文佔varchar2幾個位元組要根據oracle中字符集編碼決定:

1.gbk,乙個漢字占用兩個位元組;

2.utf8,乙個漢字占用三個位元組;

在專案中就遇到乙個坑,子查詢返回的字段是char型別,與之相等的是varchar型別

//a表中的name欄位是char(10)

//b表中name欄位是varchar2(10)

//子a表中的name值:a..........(點代表空格),而b表中查詢出來的資料是:a

//當你用a表中是的值和b表中的值作相等的時候,a.........=a 肯定是查不出資料的

selelct *

from

a where name=

(select name from b where id=

'..'

)

怎麼解決char和varchar之間的關係呢?

使用trim:去空格

//a表中的name的值變成:a b表中的也是a,這樣就能查出資料了。

selelct *

from

a where trim(name)=

(select name from b where id=

'..'

)

去掉空格之後,就能解決char與vachar之間空格的坑了

Oracle中char和varchar2的區別

1.char的長度是固定的,而varchar2的長度是可以變化的,比如,儲存字串 abc 對於char 20 表示你儲存的字元將佔20個位元組 包括17個空字元 在資料庫中它是以空格佔位的,而同樣的varchar2 20 則只占用3個位元組的長度,20只是最大值,當你儲存的字元小於20時,按實際長度...

char 和char 的區別

1 char是乙個陣列定義,char 是指標定義 也稱char為靜態陣列,char 為動態陣列 2 指標和陣列的區別 1 指標和陣列的分配 陣列是開闢一塊連續的記憶體空間,陣列本身的識別符號 也就是通常所說的陣列名 代表整個陣列,可以使用sizeof來獲得陣列所佔據記憶體空間的大小 注意,不是陣列元...

char 和char 的區別

char c abc c 0 t char c1 def c1 0 t err 首先c1是乙個指標,它只是指向 def 這個記憶體塊。而 abc 是乙個常量區,不可以對其進行更改。而c定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...