mysql string 列類型


CHARVARCHAR

    CHARVARCHAR類型聲明的長度表示你想要保存的最大字符數

    char 0~255 尾部填充空格到指定長度,檢索時自動去掉空格

    varchar 0~65535

        VARCHAR值保存時只保存需要的字符數,另加一個字節來記錄長度(如果列聲明的長度超過255,則使用兩個字節)

        不進行空格填充

        注意

            受限於mysql單行最大字節(InnoDB,65535,考慮到編碼

            如果為latin1,則varchar最大為 65535-2-1=65532(null標志位占用一個字節,長度最大占用兩個字節)

            如果為utf-8,則varchar最大為 65532/3 = 21844,雖然理論值為 65535/3=21845

            綜上,如果varchar的數值過大,應該采用text類型,該類型可以存儲65535個字符。

            參考:

                https://stackoverflow.com/questions/332798/equivalent-of-varcharmax-in-mysql

                https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html

                

    所有MySQL校對規則屬於PADSPACE類。

    這說明在MySQL中的所有CHARVARCHAR值比較時不需要考慮任何尾部空格

 

BINARYVARBINARY

    沒有字符集,並且排序和比較基於列值字節的數值值

    BINARYVARBINARY允許的最大長度一樣

    長度是字節長度而不是字符長度

  

    binary:填充值是0x00(零字節),插入填充,取出不剪裁

    varbinary:不填充、不剪裁

    

    如果檢索的值必須與指定進行存儲而沒有填充的值相同,最好使用BLOB數據類型。

 

BLOBTEXT類型

    BLOB 列被視為二進制字符串(字節字符串)

    BLOB列沒有字符集,並且排序和比較基於列值字節的數值值。

    

    TEXT列被視為非二進制字符串(字符字符串)

    TEXT列有一個字符集,並且根據字符集的 校對規則對值進行排序和比較。

 

    在大多數方面,可以將BLOB列視為能夠足夠大的VARBINARY列。同樣,可以將TEXT列視為VARCHAR

 

    BLOBTEXT在以下幾個方面不同於VARBINARYVARCHAR

        當保存或檢索BLOBTEXT列的值時不刪除尾部空格。(這與VARBINARYVARCHAR列相同)。

        對於BLOBTEXT列的索引,必須指定索引前綴的長度。對於CHARVARCHAR,前綴長度是可選的。

        BLOBTEXT列不能有 默認值。

        排序時也要指定參與排序的長度。(max_sort_length

        對於BLOBTEXT列的索引,必須指定索引前綴的長度。對於CHARVARCHAR,前綴長度是可選的。

 

    BLOBTEXT類需要 123或者4個字節來記錄列值的長度,取決於該類的最大可能的長度

 

列類型存儲需求

    MyISAM表中行的最大大小為65,534字節(innodb 65535)。每個BLOBTEXT列 賬戶只占其中的59個字節

 要想計算用於保存具體CHARVARCHAR或者TEXT列值的字節數,需要考慮該列使用的字符集

 

  字符串類型的存儲需求

  

列類型

存儲需求

CHAR(M)

M個字節,0 <= M <= 255

VARCHAR(M)

L+1個字節,其中L <= M 0 <= M <= 65535(參見下面的注釋)

BINARY(M)

M個字節,0 <= M <= 255

VARBINARY(M)

L+1個字節,其中L <= M 0 <= M <= 255

TINYBLOB, TINYTEXT

L+1個字節,其中L < 28

BLOB, TEXT

L+2個字節,其中L < 216

MEDIUMBLOB, MEDIUMTEXT

L+3個字節,其中L < 224

LONGBLOB, LONGTEXT

L+4個字節,其中L < 232

ENUM('value1','value2',...)

12個字節,取決於枚舉值的個數(最多65,535個值)

SET('value1','value2',...)

1234或者8個字節,取決於set成員的數目(最多64個成員)

 

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

  對於CHAR、VARCHAR和TEXT類型,前面的表中的值LM應解釋為字符數目,並且列定義中的這些類型的長度表示字符數目。例如,要想保存一個TINYTEXT值需要L字符+ 1個字節。

 

要想計算用於保存具體CHAR、VARCHAR或者TEXT列值的字節數,需要考慮該列使用的字符集。在具體情況中,當使用Unicode時,必須記住所有Unicode字符使用相同的字節數。為了細分用於不同類Unicode字符使用的存儲,參見10.5節,“Unicode支持”

 

注釋:VARCHAR列的有效最大長度為65,532字符。

 

 參考

  mysql手冊 列類型-string類型章節

  http://www.cnblogs.com/gomysql/p/3615897.html

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM