char 1 和varchar 1 的區別

2021-06-29 08:30:05 字數 1495 閱讀 8788

區別就是char是定長,varchar是變長。

@xman_78tom

varchar(1) 相對 char(1) 不但沒有優勢,還會拖累效能。

在儲存上, varchar 型別需要 2 個位元組的額外空間來跟蹤儲存字串的長度,這樣 varchar(1) 實際占用的是 3 個位元組。因此,varchar(1) 要比 char(1) 占用更大的空間,在同等環境下便可能消耗更多的 i/o。這個應該是 varchar 型別的優勢,但對 varchar(1) 確實劣勢。

在效能上,sql server 在處理 char 型別上也要比處理 varchar 快一點(如,某些 update 操作,對 char 型別便是佔位更新,而對 varchar 便會造成分頁)。這一點網上有很多論述。

@libinlink

選用原則:一般都用varchar,用char需求一變化就要改啦。。。。。

@xys_777

程式判斷上稍有區別

當使用者輸入a,提交後,又刪除a,提交後,varchar(1)是空字串(oracle中不存在空字串)

char(1)是1個空格

create table ttt(char1 char(1),varchar1 varchar(1))

insert ttt select'a','a'

update ttt set char1='',varchar1=''

select ascii(char1),ascii(varchar1) from ttt

----------- -----------

32 null

(所影響的行數為 1 行)

@aitcax

在mysql中測試,得到結果是:

create table 't_user'(

`char1` char(1) null default null,

`varchar1` varchar(1) null default null

)update t_user set char1='' ,varchar1='' where u_id=1;

select ascii(char1),ascii(varchar1) from t_user where u_id=1;

mysql> select ascii(char1),ascii(varchar1) from t_user where u_id=1;

+--------------+-----------------+

| ascii(char1) | ascii(varchar1) |

+--------------+-----------------+

| 0 | 0 |

+--------------+-----------------+

可以看到在mysql中,得到的結果都是空字串,ascii(0)表示空。

附:ascii碼特殊字元意義

Char1 理解C 模式的基礎

原書這章叫做物件導向程式設計的實質。但我認為交理解c 模式的基礎更合適。因為這章主要就是重複了一些物件導向的c 語言元素。不過還是提出了一些問題,比如引用產生依賴,如何消除依賴等。型別 sturct,class,inte ce,generic 泛型 作用域 internal,internal pro...

char和varchar的區別

char char是定長的,也就是當你輸入的字元小於你指定的數目時,char 8 你輸入的字元小於8時,它會再後面補空值。當你輸入的字元大於指定的數時,它會擷取超出的字元。nvarchar n 包含 n 個字元的可變長度 unicode 字元資料。n 的值必須介於 1 與 4,000 之間。位元組的...

char 和 varchar的區別

varchar 儲存了可變長度的字串,是使用較多的字串型別。它比固定長度型別占用更少的儲存空間,因為它只占用了實際需要空間,比較靈活。但如果設定了row format fixed建立的myisam引擎表,那麼每行占用固定長的空間,就會造成浪費。varchar使用額外的1到2位元組來儲存值得長度。如果...