mysql中char和varchar都是字串型別,但是他們的儲存和檢索的方式不一樣。char
是定長的字串,varchar是不定長的字串。
char
型別長度是(0-255)之間,在當某個欄位被定義成char類,並指定長度,其長度就不再變化,當 char 值被儲存時,他們被用空格在右邊填補到指定的長度。當 char 值被檢索時,填充的空格被刪去。
varchar
型別長度是(0-255)之間,與 char 型別相反,varchar 值只儲存所需的字元,外加乙個位元組記錄長度,值不被填補,當值被儲存時,拖後的空格被刪去。
如果你把乙個超過列最大長度的值賦給乙個 char 或 varchar 列,值被截斷以 適合串型別。
例如,我們用下表來說明儲存一系列不同的串值到 char(4)和 varchar(4)列的結果:
表 1-7 char 型別和 varchar 型別的對比
值char(4)
儲存需求
varchar(4)
儲存需求'''
4位元組''1
位元組'ab'
'ab4
位元組'ab'3位元組
'abcd'
'abcd'4位元組
'abcd'5位元組
'abcdefgh'
'abcd'4位元組
'abcd'5位元組
雖然實際儲存的值並不一樣,但是查詢時,這兩種型別是一致的,因為 char(4)型別多於的空格將被忽略。
大多數情況下,同一表中char 和varchar只能使用其中之一,若包含兩種型別,則mysql 會將列從一種型別轉換為另一種型別。
其原因如下:
1、
行定長的錶比行可變長的表容易處理,效率更高。
2、
只有所有的型別是定長時,行才是定長的,才能提高效能。
3、
有時為了節省儲存空間,使用了變長型別,在這種情況下最好也將定長列轉換為可變長列。
char 字串和char 字串的理解
一 char 字串 1.如何宣告乙個char 字串 你可以這樣 char str test str是乙個指標,存放在棧區,test 是乙個常量,存放在常量區,vs2017要求這句宣告前面必須加上const,因為它所指向的常量字串是不可更改的 delete str 還可以這樣 char str new...
char 與 char 傳字串的區別
今天寫 的時候,寫了乙個字串的翻轉,簡單的說就是兩個指標乙個指頭乙個指尾,然後交換兩個指標的內容並讓指標挪動。void reversestring char str end while start end printf s str 就是上面的程式,編譯的時候沒有問題,但是執行的時候,程式在紅字處掛掉...
字串陣列char 和字串指標char 的討論
相同點 1.char a 和char a在作為形參的時候完全相同。2.在初始化時,都可以使用常量字串,區別1.內容位址不同 char a abcd 此時 abcd 存放在常量區,然後在棧上分配記憶體給a,並指向 abcd 在常量區的首位址。對於指標本身a來說,它是可變的,允許修改,可以指向其他的位址...