zoukankan      html  css  js  c++  java
  • 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不会存在这个问题。

  • 相关阅读:
    在软硬件系统总体架构设计
    WCF服务重构
    步步为营 .NET 设计模式学习笔记 四、Singleton(单例模式)
    我爱编程
    对.NET初学者两个问题的个人见解
    郁闷的一本书《深入解析Windows操作系统》
    欢迎使用 PDF.NET 数据开发框架【转载】
    使用ASP.NET MVC2+PDF.NET 构建一个简单的新闻管理程序
    不使用DalFactory和IDAL,支持多种数据库应用
    Web开发人员非常有用的手册
  • 原文地址:https://www.cnblogs.com/wqbin/p/11927456.html
Copyright © 2011-2022 走看看