下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

varchar和text说不清的那些事

作者:课课家教育     来源: http://www.kokojia.com点击数:1849发布时间: 2017-09-05 09:30:20

标签: 数据库MySQL字段类型

  数据库定义到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能够更加高效的提供小数据查询/事务处理。

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

赞(29)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程