数据库定义到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能够更加高效的提供小数据查询/事务处理。
更多内容尽在课课家教育!