• MySQL之text字段


    TEXT类型一般分为 TINYTEXT(255长度)、TEXT(65535)、 MEDIUMTEXT(int最大值16M),和LONGTEXT(long最大值4G)这四种,它被用来存储非二进制字符集,二进制字符集使用blob类型的字段来存储。

    对于text列,插入时MySQL不会对它进行填充,并且select时不会删除任何末尾的字节。

    如果text列被作为索引,则在它的内容后面添加空格时,会出现duplicate key错误,也就是说,如果我们定义了一个作为索引的text字段,它的值是'a',则不能定义一个值为'a '的记录,因为这样会产生冲突。

    对text列进行排序的时候,决定顺序的字符个数是由参数max_sort_length来决定的

    text和varchar的区别

    SET max_sort_length=1000; 
    SELECT id,comment FROM table ORDER BY comment;

    在大多数情况下,我们可以把text视为varchar字段,但是这两个字段类型在存储字符大小上有一些区别:

        varchar在mysql中必须满足最大行宽度限制,也就是 65535(64k)字节,而varchar本身是按字符串个数来定义的,在mysql中使用uft-8字符集一个字符占用三个字节,所以单表varchar实际占用最大长度如下:
        1.使用utf-8字符编码集varchar最大长度是(65535-2)/3=21844个字符(超过255个字节会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。
        2.使用 utf-8mb4字符集,mysql中使用 utf-8mb4 字符集一个字符占用4个字节,所以 varchar 最大长度是(65535-2)/4=16383 个字符(超过255个字节会有2字节的额外占用空间开销,所以减2,如果是255以下,则减1)。

        text的最大限制也是64k个字节,但是本质是溢出存储,innodb默认只会存放前768字节在数据页中,而剩余的数据则会存储在溢出段中。text类型的数据,将被存储在元数据表之外地方,但是varchar/char将和其他列一起存储在表数据文件中,值得注意的是,varchar列在溢出的时候会自动转换为text类型。text数据类型实际上将会大幅度增加数据库表文件尺寸。

        除此之外,二者还有以下的区别

    1、当text作为索引的时候,必须 制定索引的长度,而当varchar充当索引的时候,可以不用指明。

    2、text列不允许拥有默认值

    3、当text列的内容很多的时候,text列的内容会保留一个指针在记录中,这个指针指向了磁盘中的一块区域,当对这个表进行select *的时候,会从磁盘中读取text的值,影响查询的性能,而varchar不会存在这个问题。

  • 相关阅读:
    <mySql完全手册>2011031401
    <海量数据库解决方案>2011030801
    检索
    <mySql完全手册>2011022401
    <自己动手写操作系统>2011031601
    数据结构和算法基础
    <海量数据库解决方案>2011031001
    <自己动手写操作系统>2011032101
    Delphi方法类型
    .NET下的Login机制
  • 原文地址:https://www.cnblogs.com/wqbin/p/11927456.html
Copyright © 2020-2023  润新知