1樓:
char 和 varchar
固定長度 (char) 或可變長度 (varchar) 字元資料型別。
char[(n)]
長度為 n 個位元組的固定長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為 n 個位元組。
char 在 sql-92 中的同義詞為 character。
varchar[(n)]
長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。
所輸入的資料字元長度可以為零。varchar 在 sql-92 中的同義詞為 char varying 或 character varying。
2樓:匿名使用者
varchar型別是標準組織要求實現的型別,即可變長字元型別。而char是定長型別,通常固定為255字元。
3樓:匿名使用者
varchar是長度可變的,char是單位元組長度。
char(10)和varchar(10)主要的區別是什麼?
4樓:靠名真tm難起
首先明確的是,char的長度是不可變的,而varchar的長度是可變的,
定義乙個char[10]和varchar[10],如果存進去的是『abcd』,那麼char所佔的長度依然為10,除了字元『abcd』外,後面跟六個空格,而varchar就立馬把長度變為4了,取資料的時候,char型別的要用trim()去掉多餘的空格,而varchar是不需要的,
char的訪問數度還是要比varchar要快得多,因為其長度固定,方便程式的儲存與查詢;但是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多餘的空格佔位符佔據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。
char的儲存方式是,對英文本元(ascii)占用1個位元組,對乙個漢字占用兩個位元組;而varchar的儲存方式是,對每個英文本元占用2個位元組,漢字也占用2個位元組,兩者的儲存資料都非unicode的字元資料。
擴充套件資料:char是c/c++整型資料中比較古怪的乙個,其它的如int/long/short等不指定signed/unsigned時都預設是signed,但char在標準中是unsigned,編譯器可以實現為帶符號的,也可以實現為不帶符號的,有些編譯器如psos的編譯器,還可以通過編譯開關來指定它是有符號數還是無符號數。
5樓:匿名使用者
char的長度是固定的,而varchar2的長度是可以變化的, 比如,儲存字串「abc",對於char (10),表示你儲存的字元將佔10個位元組(包括7個空字元),而同樣的varchar2 (10)則只占用3個位元組的長度,10只是最大值,當你儲存的字元小於10時,按實際長度儲存。
char的效率比varchar2的效率稍高。
目前varchar是varchar2的同義詞。工業標準的varchar型別可以儲存空字串,但是oracle不這樣做,儘管它保留以後這樣做的權利。
char(10)若輸入資料的字元數小於10,則系統自動在其後新增空格來填滿設定好的空間。若輸入的資料過長,將會截掉其超出部分。varchar(10)資料型別的儲存長度為實際數值長度。
6樓:人文漫步者
你想要區分這個變成成的區別,主要是乙個是字段的長度,乙個是詞語的程度是不同的型別。
7樓:匿名使用者
char(10)是不可變長度為10的字串,佔的儲存空間始終為10個字元的長度,而varchar(10)是可變長度的字串,故而可以節省空間。例如:
儲存"aaaaabbbbb",則char(10)需要10個字元的空間來儲存,varchar(10)也需要10個字元的空間;
儲存"aaa",則char(10)需要10個字元的空間來儲存,而varchar(10)只需要3個字元的空間。
雖然每個記錄節省的空間有限,但是記錄很多的時候,節省的空間是很驚人的。
另外,推薦用varchar2代替varchar。因為oracle今後會將varchar作為其他用途。varchar2目前和varchar是完全相同的資料型別。
mysql中char和varchar有什麼區別?
8樓:超級飄飄乖乖
1.都是用來儲存字串的,只是他們的儲存方式不一樣。
2.char有固定的長度,而varchar屬於可變長的字元型別。
char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:
char(m)型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足.在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組(即總長度為l+1位元組)。
在mysql中用來判斷是否需要進行對據列型別轉換的規則
1、在乙個資料表裡,如果每乙個資料列的長度都是固定的,那麼每乙個資料行的長度也將是固定的.
2、只要資料表裡有乙個資料列的長度的可變的,那麼各資料行的長度都是可變的.
3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,mysql會把這個資料表裡的固定長度型別的資料列轉換為相應的可變長度型別.
9樓:椰子糖
varchar通常用於儲存可變長字串。在磁碟儲存資料時,它只會占用實際使用到的空間,因此對效能有提公升。vachar在儲存資料時會額外使用1個或者2個字元,用於記錄列的長度,如果列內位元組長度小於等於255就使用1個位元組記錄,如果是大於255則使用2個位元組記錄。
因為varchar是變長的,所以update操作可能會產生碎片,從而使列的長度變長,mysql還需要做額外的工作處理。其實varchar(5)和varchar(255)儲存'hello'所用的空間是一樣的,但是我們在實際使用的時候,列的長度還是越短越好,原因是更長的列會占用更多的記憶體,mysql通常會分配固定大小的記憶體塊儲存內部值。這個在記憶體臨時表做排序和操作的時候會變得很糟糕,在磁碟臨時表進行排序時也會特別的糟糕。
再說一下char,對比下你就會明白。
char型別適用於儲存固定長度的資料。比如說md5後的密碼,這個長度就是固定的32位,很適合使用char型別。因為char型別是固定長度,因此在修改資料時也不容易產生碎片。
他在磁碟上的儲存空間是固定的,如果儲存的資料長度不夠,會在右側以空格的方式補充,方便進行比較。對於非常短的列(單位元組字符集),char的效率比varchar要高,因為char不需要使用額外的位元組去記錄長度。
使用什麼樣的型別儲存資料,要根據實際情況而定,最好是對各種儲存型別都有一定的了解。
純手打,希望可以幫到你,共同進步。:)
10樓:我**很紅
在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組,這個說法是錯的。當 m <= 255 的時候是用乙個位元組即可記錄其長度,當 m>255 的時候則需要2個位元組。因為 1 個位元組只能記錄變長長度為 0~255,而如果變長長度為 32767 這種大於 255 的值的時候,是沒有辦法單單用1個位元組記錄下來的。
11樓:
char固定長度,是說占用空間的長度一定,而不是必須有那麼多值。你輸入兩個字元,第三個字元空著,但是必須不能被其它字元占用。
varchar就可以啊!沒有占用到那麼長,就可以少給她分配空間,從而達到介紹資源的目的!
12樓:匿名使用者
char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是:
char(m)型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足.(在檢索操作中那些填補出來的空格字元將被去掉)在varchar(m)型別的資料列裡,每個值只占用剛好夠用的位元組再加上乙個用來記錄其長度的位元組(即總長度為l+1位元組).
在mysql中用來判斷是否需要進行對據列型別轉換的規則
1、在乙個資料表裡,如果每乙個資料列的長度都是固定的,那麼每乙個資料行的長度也將是固定的.
2、只要資料表裡有乙個資料列的長度的可變的,那麼各資料行的長度都是可變的.
3、如果某個資料表裡的資料行的長度是可變的,那麼,為了節約儲存空間,mysql會把這個資料表裡的固定長度型別的資料列轉換為相應的可變長度型別.
例外:長度小於4個字元的char資料列不會被轉換為varchar型別
13樓:小湯圓
乙個定長
乙個不定長
a char(10)
b varchar(10)
都存入'abc'
a10位元組
b3位元組
資料庫中char和varchar的區別
14樓:雯兒心
char的長度是不可變的,而varchar的長度是可變的,也就是說,定義乙個char[10]和varchar[10],如果存進去的是『csdn』,那麼char所佔的長度依然為10,除了字元『csdn』外,後面跟六個空格,而varchar就立馬把長度變為4了,取資料的時候,char型別的要用trim()去掉多餘的空格,而varchar是不需要的,儘管如此,char的訪問數度還是要比varchar要快得多,因為其長度固定,方便程式的儲存與查詢;但是char也為此付出的是空間的代價,因為其長度固定,所以難免會有多餘的空格佔位符佔據空間,可謂是以空間換取時間效率,而varchar是以空間效率為首位的。再者,char的儲存方式是,對英文本元(ascii)占用1個位元組,對乙個漢字占用兩個位元組;而varchar的儲存方式是,對每個英文本元占用2個位元組,漢字也占用2個位元組,兩者的儲存資料都非unicode的字元資料。
char和varchar的區別
15樓:屠龍阿九
區別:1.char的長度是固定的,而varchar2的長度是可以變化的, 比如,儲存字串「abc",對於char (10),表示你儲存的字元將佔10個位元組(包括7個空字元),而同樣的varchar2 (10)則只占用3個位元組的長度,10只是最大值,當你儲存的字元小於10時,按實際長度儲存。
2.char的效率比varchar2的效率稍高。
3.目前varchar是varchar2的同義詞。工業標準的varchar型別可以儲存空字串,但是oracle不這樣做,儘管它保留以後這樣做的權利。oracle自己開發了乙個資料型別varchar2,這個型別不是乙個標準的varchar,它將在資料庫中varchar列可以儲存空字串的特性改為儲存null值。
如果你想有向後相容的能力,oracle建議使用varchar2而不是varchar。
何時該用char,何時該用varchar2?
char與varchar2是一對矛盾的統一體,兩者是互補的關係.
varchar2比char節省空間,在效率上比char會稍微差一些,即要想獲得效率,就必須犧牲一定的空間,這也就是我們在資料庫設計上常說的『以空間換效率』。
varchar2雖然比char節省空間,但是如果乙個varchar2列經常被修改,而且每次被修改的資料的長度不同,這會引起『行遷移』(row migration)現象,而這造成多餘的i/o,是資料庫設計和調整中要盡力避免的,在這種情況下用char代替varchar2會更好一些。
varchar和char有什麼區別
區別 1 char的長度是固定的,而varchar2的長度是可以變化的,比如,儲存字串 abc 對於char 10 表示你儲存的字元將佔10個位元組 包括7個空字元 而同樣的varchar2 10 則只占用3個位元組的長度,10只是最大值,當你儲存的字元小於10時。char 10 和varchar ...
cint型指標和char型指標有什麼區別
風若遠去何人留 本質上來說是一樣的,不管是什麼指標,其本質就是一個地址。但是在使用上還是有所不同的。1 預設指向空間佔用的大小不同。int 指向空間需要有4個位元組,char 指向空間有一個位元組就可以了。如果int 指向的空間不足,那麼對其讀寫時就會出現越界操作。2 使用時的可取值範圍不同。用 取...
c語言中char的用法,C語言中char的用法
會飛的小兔子 include intmain inti charc 定義乙個char型別的變數。c a 賦值 for i 0 i 26 i printf c c 輸出乙個字元用 c,c charc增加1,依次可以得到 abcdef。zprintf n if c z printf stillasmal...