中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MySQL中varchar和char類型有什么區別

發布時間:2021-11-15 09:04:39 來源:億速云 閱讀:179 作者:iii 欄目:開發技術

本篇內容介紹了“MySQL中varchar和char類型有什么區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

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)字段的表,并且往里面插入一些值:

CREATE TABLE char_test
(
    char_col CHAR(10)
);
 
INSERT INTO char_test 
VALUES
    ('string1').
    ('  string2').
    ('string3  ');

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

SELECT CONCAT("'", char_col, "'")
FROM char_test;

MySQL中varchar和char類型有什么區別 

執行結果

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

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通常會分配固定大小的內存塊來保存內部值。尤其是使用內存臨時表進行排序或操作時會特別糟糕。在利用磁盤臨時表進行排序時也同樣糟糕。

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

“MySQL中varchar和char類型有什么區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

驻马店市| 延边| 白银市| 徐闻县| 武乡县| 江永县| 叶城县| 突泉县| 信宜市| 盐城市| 梁山县| 忻城县| 贵德县| 元氏县| 东丰县| 固镇县| 樟树市| 九江市| 宝应县| 吕梁市| 涿州市| 剑阁县| 南漳县| 南陵县| 连山| 易门县| 弥勒县| 四会市| 崇明县| 邯郸县| 南华县| 呼和浩特市| 昭苏县| 长春市| 富源县| 星座| 临海市| 永德县| 巴林右旗| 华坪县| 岗巴县|