當前位置:成語大全網 - 漢語詞典 - mysql中的varchar到底能存儲多久?

mysql中的varchar到底能存儲多久?

mysql中的varchar可以存儲多久?1.varchar type更改4.1以下varchar type的MySQL數據庫的壹個版本的最大長度限制為255,其數據範圍可以是0~255,也可以是1~255(取決於數據庫的不同版本)。在MySQL5.0以上版本中,varchar數據類型的長度支持到65535,即

mysql中的varchar可以存儲多久?

1.varchar類型更改

4.1以下varchar類型的MySQL數據庫最大長度限制為255,其數據範圍可以是0~255,也可以是1~255(取決於數據庫的不同版本)。在MySQL5.0以上版本中,支持varchar數據類型的長度為65535,這意味著它可以存儲65532字節的數據,起始位和結束位占用三個字節,這意味著4.1或以下版本中需要以固定文本或BLOB格式存儲的數據可以存儲在變長varchar中,可以有效減小數據庫文檔的大小。

在4.1以下varchar類型的MySQL數據庫版本中,nvarchar(存儲Unicode數據類型的字符)存儲為2字節,壹般用於中文或其他語言輸入,不容易被亂碼;Varchar:漢字為2字節,其他字符存儲為1字節。varchar適合輸入英文和數字。

在4.0版本下,varchar(20)指的是20個字節。如果存儲UTF8漢字,只能存儲6個(每個漢字3個字節);在5.0版本以上,varchar(20)是指20個字符。無論存儲數字、字母還是UTF8漢字(每個漢字3字節),都可以存儲20個字符,最大大小為65532字節;Varchar(20)在Mysql4中最多只有20字節,但Mysql5根據代碼不同,存儲大小也不同。具體規則如下:

a)儲存限制

Varchar字段在聚簇索引之外單獨存儲實際內容,實際長度在內容開頭用1到2個字節表示(長度超過255需要2個字節),所以最大長度不能超過65535。

b)代碼長度限制

如果字符類型為gbk,每個字符最多占用2個字節,最大長度不能超過32766;

如果字符類型是utf8,每個字符最多占用3個字節,最大長度不能超過21845。

如果定義超過上述限制,varchar字段將被強制轉換為文本類型,並生成警告。

c)線路長度限制

實際應用中限制varchar長度的是行定義的長度。MySQL要求行的定義長度不能超過65535。如果定義的表格長度超過此值,將會提示您。

錯誤1118 (42000):行大小太大。所用表類型的最大行大小(不包括BLOBs)是65535。您必須將壹些列更改為文本或斑點。

2.char (m)和varchar (m)的區別

CHAR(M)定義的列的長度是固定的,M的值可以在0到255之間。保存CHAR值時,空格會填充到它們的右側,以達到指定的長度。當檢索CHAR值時,尾部空格被刪除。在存儲或檢索期間不執行大小寫轉換。CHAR存儲定長數據非常方便,對CHAR字段的索引效率高。比如妳定義了char(10),那麽不管妳存儲的數據是否達到10字節,都會占用10字節,不足的數據會自動用空格填充。

VARCHAR(M)定義的列的長度是壹個可變長度的字符串,M的值可以在0到65535之間。(VARCHAR的最大有效長度由最大行大小和使用的字符集決定。總最大長度為65,532字節)。保存VARCHAR值時,只保存所需的字符數,加上壹個字節記錄長度(如果列聲明的長度超過255,則使用兩個字節)。VARCHAR值保存時沒有填充。當保存和檢索該值時,尾部空格仍然保留,這符合標準SQL。VarCHAR存儲的是變長數據,但是存儲效率沒有CHAR高。如果字段的可能值長度不固定,我們只知道不能超過10個字符,定義為VARCHAR(10)最經濟。VARCHAR類型的實際長度是其值的實際長度+1。為什麽“+1”?該字節用於存儲實際使用了多少長度。考慮到空間,varchar合適;考慮到效率,用char比較合適,關鍵是要根據實際情況找到平衡點。

CHAR和VARCHAR最大的區別就是壹個是定長,壹個是變長。因為它的長度是可變的,所以它是實際的字符串加上壹個字節來記錄字符串的長度(如果超過255,就需要兩個字節)。如果分配給CHAR或VARCHAR列的值超過了該列的最大長度,則該值將被裁剪以適應該列。如果剪切字符不是空格,將生成警告。如果裁剪非空白字符,將導致錯誤(不是警告)並禁止使用嚴格SQL模式插入值。

3.varchar與文本和BlOB類型的區別

VARCHAR、BLOB和TEXT類型是可變長度類型,它們的存儲要求取決於列值的實際長度(在上表中用L表示),而不是類型的最大可能大小。例如,VARCHAR(10)列可以存儲最大長度為10個字符的字符串。實際的存儲需要是字符串的長度,加上1字節來記錄字符串的長度。對於字符串' abcd ',l是4,存儲要求是5字節。

BLOB和TEXT類型需要1、2、3或4個字節來記錄列值的長度,這取決於類型的最大可能長度。VARCHAR需要定義大小,最大限制為65535字節;不需要文本。如果將超過列類型最大長度的值賦給BLOB或TEXT列,該值將被截斷以適應它。

BLOB是壹個大的二進制對象,可以容納可變數量的數據。四種BLOB類型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB的區別僅在於它們可以保存的值的最大長度。

BLOB可以存儲圖片,但是文本不能。TEXT只能存儲純文本文件。四種文本類型TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT對應於四種BLOB類型,並且具有相同的最大長度和存儲要求。BLOB和TEXT類型之間的唯壹區別是,BLOB值的排序和比較是以區分大小寫的方式執行的,而TEXT值不區分大小寫。換句話說,文本是壹個不區分大小寫的BLOB。

4.總結char、varchar和text之間的區別。

長度的區別,char的範圍是0 ~ 255,varchar最長的是64k,但是註意這裏的64k是整行的長度,其他的列要考慮進去,如果有not null就占壹位。對於不同的字符集,有效長度是不壹樣的,比如utf8,最長21845,其他列要去掉,壹般情況下varchar足夠存儲了。如果遇到大文字,可以考慮用文字,最多能達到4G。

效率基本上是char & gtvarchar & gt文本,但如果使用Innodb引擎,建議使用varchar而不是char。

Char和varchar可以有默認值,text不能指定默認值。

數據庫存儲需要選擇合適的數據類型,對性能有壹定的影響。這裏零零碎碎記錄了兩筆。對於int類型,如果不需要訪問負值,最好加無符號;;對於經常出現在where語句中的字段,可以考慮添加索引,尤其是那些整形的字段。