varchar和text说不清的那些事

    作者:课课家教育更新于: 2017-05-25 15:31:53

      数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间,而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;另一种是则是觉得无所谓,尽量用可变类型的,长度尽量放大些。

      小编在本文将跟大家分享MySQL中的varchar和text两种字段类型~

     数据库定义到char类型的字段时,不知道大家是否会犹豫一下,到底选char、nchar、varchar、nvarchar、text、ntext中哪一种呢?结果很可能是两种,一种是节俭人士的选择:最好是用定长的,感觉比变长能省些空间,而且处理起来会快些,无法定长只好选用定长,并且将长度设置尽可能地小;另一种是则是觉得无所谓,尽量用可变类型的,长度尽量放大些。    小编在本文将跟大家分享MySQL中的varchar和text两种字段类型~

      1.varchar整个字段最长只能是64k,根据编码不通,能够存储最长的字符数不同,另外表示varchar长度的部分在最前端也需要占用1-2个字节

      2.text类型分为4类,tinytext、text、mediumtext和longtext

      分别是256字节,65535字节,16777216字节和4294967296(4GB)

      text类型不能指定默认值。在mysql中,对于text类型数据和varchar/char的存储有些不同,text类型的数据,将被存储在元数据表之外地方,但是varchar/char将和其他列一起存储在表数据文件中.

      text数据类型实际上将会大幅度增加数据库表文件尺寸,那么在物理存储方面有些影响,同时对text数据的检索和IO输出也会增加对内存的竞争.

      3.text列存储不放在元数据行,另外开辟存储空间,行存储的只是blob的指针,可能引起io争用

      4.尽量不用text类型,如果一定要使用,请与DBA商量之后使用

      小结

      根据存储的实现:可以考虑用varchar替代tinytext

      如果需要非空的默认值,就必须使用varchar

      如果存储的数据大于64K,就必须使用到mediumtext,longtext

      varchar(255+)和text在存储机制是一样的

      需要特别注意varchar(255)不只是255byte,实质上有可能占用的更多。

      特别注意,varchar大字段一样的会降低性能,所以在设计中还是一个原则大字段要拆出去,主表还是要尽量的瘦小

      小编结语:

      很多时候,我们建议将text类型特别是长度较大或者变更频繁的数据,存储在其他专有的平台中,例如NOSQL..本质上说,不是mysql不适合存储text,而是在太多的情况下我们期望mysql能够更加高效的提供小数据查询/事务处理。

      更多内容尽在课课家教育!

课课家教育

未登录