mysql string 列類型

CHARVARCHARhtml

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

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

    varchar 0~65535ui

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

        不進行空格填充spa

        注意code

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

            若是爲latin1,則varchar最大爲 65535-2-1=65532(null標誌位佔用一個字節,長度最大佔用兩個字節)blog

            若是爲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

相關文章
相關標籤/搜索