国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - MySQL中varchar和char類型的區別

MySQL中varchar和char類型的區別

2021-12-06 19:15滿丶懷 Mysql

VARCHAR和CHAR是兩種最主要的字符串類型。那么MySQL中varchar和char類型的區別是什么,本文就具體來介紹一下,感興趣的可以了解一下

前述

varchar和char是兩種最主要的字符串類型。不幸的是,很難精確地解釋這些值是怎么存儲在磁盤和內存中的,因為這跟存儲引擎的具體實現有關。下面的描述假設使用的存儲引擎是innodb和/或者myisam。如果使用的不是這兩種存儲引擎,請參考所使用的存儲引擎的文檔。

先看看varchar和char值通常在磁盤上怎么存儲。請注意,存儲引擎存儲char或者varchar值的方式在內存中和在磁盤上可能不一樣,所以mysql服務器從存儲引擎讀出的值可能需要轉換為另一種存儲格式。

varchar類型

varchar類型用于存儲可變長字符串,是最常見的字符串數據類型。它比定長類型更節省空間,因為它僅使用必要的空間(例如,越短的字符串使用越少的空間)。有一種情況例外,如果mysql表使用row_format=fixed創建的話,每一行都會使用定長存儲,這會很浪費空間。

varchar需要使用1或2個額外字節記錄字符串的長度:如果列的最大長度小于或等于255字節,則只使用1個字節表示,否則使用2個字節。假設采用latin1字符集,一個varchar(10)的列需要11個字節的存儲空間。varchar(1000)的列則需要1002個字節,因為需要2個字節存儲長度信息。

varchar節省了存儲空間,所以對性能也有幫助。但是,由于行是變長的,在update時可能使行變得比原來更長,這就導致需要做額外的工作。如果一個行占用的空間增長,并且在頁內沒有更多的空間可以存儲,在這種情況下,不同的存儲引擎的處理方式是不一樣的。例如,myisam會將行拆成不同的片段存儲,innodb則需要分裂頁來使行可以放進頁內。其他一些存儲引擎也許從不在原數據位置更新數據。

varchar適用情況

下面這些情況下適用varchar是合適的:

  • 字符串列的最大長度比平均長度大很多
  • 列的更新很少,所以碎片不是問題
  • 使用了像utf-8這樣復雜的字符集,每個字符都使用不同的字節數進行存儲

char類型

char類型是定長的:mysql總是根據定義的字符串長度分配足夠的空間。當存儲char值時,mysql會刪除所有的末尾空格。char值會根據需要采用空格進行填充以方便比較。

char適合存儲很短的字符串,或者所有值都接近同一個長度。例如,char非常適合存儲密碼的md5值,因為這是一個定長的值。對于經常變更的數據,char也比varchar更好,因為定長的char類型不容易產生碎片。對于非常短的列,char比varchar在存儲空間上也更有效率。例如用char(1)來存儲只有y和n的值,如果采用單字節字符集只需要一個字節,但是varchar(1)卻需要兩個字節,因為還有一個記錄長度的額外字節。

測試

下面通過例子來具體說明char與varchar行為上的不同,首先,我們創建一張只有一個char(10)字段的表,并且往里面插入一些值:

?
1
2
3
4
5
6
7
8
9
10
create table char_test
(
    char_col char(10)
);
 
insert into char_test
values
    ('string1').
    ('  string2').
    ('string3  ');

當我們檢索這些值的時候,會發現string3末尾的空格被截斷了。

?
1
2
select concat("'", char_col, "'")
from char_test;

MySQL中varchar和char類型的區別

 

執行結果

 

如果用varchar(10)字段存儲相同的值,可以得到如下結果:

 

 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
create table varchar_test
(
    varchar_col varchar(10)
);
 
insert into varchar_test
values
    ('string1').
    ('  string2').
    ('string3  ');
 
select concat("'", varchar_col, "'")
from varchar_test;

MySQL中varchar和char類型的區別

執行結果

varchar(5)與varchar(200)的區別

我們倘若用varchar(5)和varchar(200)來存儲'hello',我們知道這兩者的空間開銷是一樣的。那么我們可以讓varchar的長度始終保持很大嗎?使用更短的列有什么優勢嗎?

事實證明有很大的優勢。更長的列會消耗更多的內存,因為mysql通常會分配固定大小的內存塊來保存內部值。尤其是使用內存臨時表進行排序或操作時會特別糟糕。在利用磁盤臨時表進行排序時也同樣糟糕。

所以最好的策略是只分配真正需要的空間。

總結

當我們為字符串類型的字段選取類型的時候,判斷該選取varchar還是char,我們可以從以下幾個方面來考慮:

  • 該字段數據集的平均長度與最大長度是否相差很小,若相差很小優先考慮char類型,反之,考慮varchar類型。
  • 若字段存儲的是md5后的哈希值,或一些定長的值,優先選取char類型。
  • 若字段經常需要更新,則優先考慮char類型,由于char類型為定長,因此不容易產生碎片。
  • 對于字段值存儲很小的信息,如性別等,優先選取char類型,因為varchar類型會占用額外的字節保存字符串長度信息。

總之一句話,當我們能夠選取char類型的時候,或者說空間消耗相對并不是影響因素的重點時,盡量選取char類型,因為在其他方面,char類型都有著或多或少的優勢。而當空間消耗成為了很大的影響因素以后,我們則考慮使用varchar類型。

到此這篇關于mysql中varchar和char類型的區別的文章就介紹到這了,更多相關mysql varchar和char類型內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/weixin_42570248/article/details/89786882

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 日韩免费| 久久久久99精品国产片 | 亚洲狠狠丁香婷婷综合久久久 | 亚洲自拍偷拍精品视频 | 一区二区三区久久 | 国内精品视频一区 | 国内自拍视频在线观看 | 91精品国产综合久久久久久丝袜 | 欧美日韩精品一区二区三区四区 | 日韩电影一区二区三区 | 玖玖综合网 | 日本理论在线 | 欧美日韩在线视频观看 | 日韩高清在线 | 日本一区二区三区在线视频 | 欧美一区二区在线播放 | 99热视| 日韩成人在线视频 | 久草精品在线观看 | 五月激情综合 | 欧美日韩一区二区三区不卡视频 | 成人精品福利视频 | 91精品国产综合久久香蕉 | 欧美精品在线观看 | 色乱码一区二区三区网站 | 成人欧美亚洲 | 精品久久久久久 | 精品久久久久久久久久久久久久 | 国产综合免费视频 | av在线电影网 | 凹凸国产成人精品视频免费 | 中文字幕亚洲欧美日韩在线不卡 | 久久精品国产欧美亚洲人人爽 | 亚洲一区二区久久 | 亚洲网站在线观看 | 欧美精品1区 | 91久久国产精品 | 任你躁久久久久久妇女av | 懂色aⅴ精品一区二区三区蜜月 | 日韩在线免费 | 国产精品99久久久久久动医院 |