mysql中varchar跟char區別

2021-10-04 18:52:40 字數 1472 閱讀 9862

一、varchar和char的區別:

區別一:定長和變長

char表示定長、長度固定,varchanr表示變長,即長度可變。

即char型別是規定多少字長則必須儲存多少字長,超過的長度的字段則只能截取出對應的長度進行儲存,相對於要求字長長度不夠的字段則用空格補齊。

而varchar型別則是只要在規定字長之內,有多少存多少,無需補齊;超出的部分和char一樣,捨去即可。(由perfix來實現)

區別二:儲存容量不同

對於char型別來說,最多只能存放的字元個數為255,和編碼無關。

varchar最多能存放65532個字元。varchar的最大有效長度由最大行大小和使用的字符集來確定。整體最大長度是65,532位元組。

二、 在mysql中用來判斷是否需要進行對據列型別轉換的規則

在乙個資料列表裡,如果每個資料列的長度都是固定的,那麼每個資料列的寬度也是固定的。

只要資料列表裡有乙個資料列的長度可變,那麼個資料列的長度都是可變的。

如果某個資料表裡的某個資料行的長度是可變的,那麼為了節約時間,mysql會把這個資料庫裡的固定長度型別轉換為可變長度型別。但是長度小於4的char型別不會轉換為varchar型別。

三、 mysql中varchar的最大長度為多少?(這不是乙個固定的數字)

限制規則

由字符集來確定,字符集分單位元組和多位元組

latin1 乙個字元佔乙個位元組,最多能存放 65532 個字元

gbk 乙個字元佔兩個位元組, 最多能存 32766 個字元

utf8 乙個字元佔三個位元組, 最多能存 21844 個字元

注意,char 和 varchar 後面的長度表示的是字元的個數,而不是位元組數。

計算例子

若乙個表只有乙個varchar型別。其定義為

create table t4(c varchar(n)) charset=gbk; 則此處n的最大值為(65535-1-2)/2=32766個字元。

減1的原因是實際行儲存從第二個位元組開始;

減2的原因是varchar頭部的兩個位元組表示長度;

除2的原因是字元編碼是gbk

若乙個表定義為

create table t4(c int, c2 char(30), c3 varchar(n)) charset=utf8;則此處的最大值為(65535-1-2-4-30*3)/3=21812

減1與減2原因與上述例子相同

減4的原因是int型別的c佔4個位元組;

減303的原因是char(30)占用90個位元組,編碼是utf8。

如果被varchar超過上述的b規則,則被強轉為text型別,則每個字段占用定義長度為11位元組,當然這已經不是「varchar」了。

則此處n的最大值為(65535-1-2-4-303)/3=21812

create table t4(c int, c2 char(30), c3 varchar(21812)) engine=innodb default charset=utf8

nvarchar跟varchar的區別

來自網路 1 各自的定義 nvarchar n 包含 n 個字元的可變長度 unicode 字元資料。n 的值必須介於 1 與 4,000 之間。位元組的儲存大小是所輸入字元個數的兩倍。所輸入的資料字元長度可以為零。varchar n 長度為 n 個位元組的可變長度且非 unicode 的字元資料。...

MySql中varchar和varchar的區別

看了新公司的資料庫設計,有些問題思考了一下,寫這篇文章也就記錄這個問題的思考過程。首先從占用空間進行比較,varchar 10 宣告10個位元組,資料儲存時額外乙個位元組的長度字首 varchar 1000 宣告1000個位元組,如果資料長度大於255,長度字首是兩個位元組。而實際varchar資料...

mysql中char和varchar區別

結論 char 定長,效率高 varchar 不定長,效率低。char是一種固定長度的型別,varchar則是一種可變長度的型別,它們的區別是 char m 型別的資料列裡,每個值都占用m個位元組,如果某個長度小於m,mysql就會在它的右邊用空格字元補足 在檢索操作中那些填補出來的空格字元將被去掉...