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定義的是乙個陣列,在分配記憶體時,會自動給它分配四個位元組的位址,並且會進行乙份拷貝工作,此時分配是在棧區進行的,是...