zoukankan      html  css  js  c++  java
  • 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

     

     

     

     

     

  • 相关阅读:
    带有“全选”的combotree
    combotree(组合树)的使用
    根据权限显示accordion
    accordion(折叠面板)的使用
    js中substr、substring、indexOf、lastIndexOf的用法
    EasyUI中使用自定义的icon图标
    EasyUI tree的三种选中状态
    C# List集合去重使用lambda表达式
    C# DataTable去重,根据列名去重保留其他列
    win10下部署.Net Web项目到IIS10
  • 原文地址:https://www.cnblogs.com/siqi/p/10272904.html
Copyright © 2011-2022 走看看