MYSQL中字串char與varchar的區別

2021-08-21 00:18:07 字數 1023 閱讀 2527

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來說,它是可變的,允許修改,可以指向其他的位址...