暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

第28讲:MySQL文本字符串类型

何先振 2023-11-02
493

以下文章来源于何先振,责编小何


文本字符串类型



在实际项目中,我们经常用到的一种数据类型就是字符串数据。


MySQL中,文本字符串总体分为:

char、varchar、tinytext、text、mediumtext、longtext等类型





CHAR和VARCHAR类型:


都可以存储比较短的字符串。





char类型



char(M) 类型一般需要预先定义字符串长度,如果不指定(M),则表示长度默认为1个字符。


如果保存时,数据的实际长度比char类型声明的长度小,则会在右测填充空格达到指定长度。当读取数据时,会去除首尾空格。


定义char类型字段时,声明的字段长度就是存储空间的字节数。


char类型,举栗子:


创建表,c1默认长度,c2指定长度





查看表信息,默认长度的c1只有一个长度





c1插入数据,只能存一个字符








c1插入数据,超过一个字符就报错





c2插入数据,长度是5,可以最多存5个字符








中文也算一个字符








保存数据时,实际长度比声明的长度小,右侧填充空格,查询时会去掉空格,用连接函数连接*,我们看到没有空格,是因为已经被去掉了。





右侧插入空格, 检索时也会帮我们去掉








varchar类型



varchar(M)定义时,必须指定长度为M,否则会报错。


检索varchar类型的字段数据时,会保留数据尾部的空格。varchar类型的字段所占用的存储空间为字符串实际存的长度加1个字节。


varchar类型,举栗子:


创建varchar字段的表,varchar不写长度会报错。





varchar的长度最大值是65535指的是字节,一个字符3个字节,如果直接创建65535会报错。最大只能是21845,正好是最大值除以3的结果。





创建表,name为5个字符的字段





没有超过5个字符都可以








超过5个字符就不行





char和varchar 的比较:





情况1:存储很短的信息。比如门牌号:101、102...这样很短的信息应该用char,因为varchar还要占用一个byte用于存储信息长度,本来打算节约存储,结果得不偿失。


情况2:固定长度。比如使用uuid作为主键,那用char应该更合适。因为他固定长度,varchar动态根据长度的特性就消失了,而且还要占个长度信息。


情况3:十分频繁改变的column。因为varchar每次存储都要有额外的计算,得到长度等工作。如果一个非常频繁改变的列,使用varchar那就要有多的精力用于计算长度。这对于char是不需要的。


情况4:存储引擎不同使用varchar和char的区别:


MyISAM数据存储引擎:MyISMA数据表,最好使用固定长度char的数据列代替可变长度varchar的数据列。这样使得整个表静态化,从而使数据检索更快,用空间换时间。


MEMORY数据存储引擎:MEMORY数据表目前都使用固定长度的数据存储,因此无论使用char或者varchar都没关系,两者都是作为char类型处理。


InnoDB数据存储引擎:建议使用varchar类型,因为InnoDB数据表,内部的行存储格式并没有区分固定长度和可变长度。所有数据行都使用指向数据列值的头指针,而且主要影响性能的因素是数据行使用的存储总量。由于char平均占用的空间多于varchar,所以建议使用varchar。



text类型



在MySQL中,text用来保存文本类型的字符串,总共包含四种类型:

tinytext、text、mediumtext和longtext类型。


在向text类型的字段保存和查询数据时,系统自动按照实际长度存储,不需要预先定义长度。这一点和varchar类型相同。





由于实际存储的长度不确定,MySQL不允许使用text类型的字段做主键。遇到这种情况,可以使用char(M) 或者varchar(M)。


text类型,举栗子:


创建表,tx为text字段类型的表





添加数据,不会去空格,空格存多少就是多少








开发经验总结:


text文本类型,可以存比较大的文本段,搜索速度稍慢,因此如果不是特别大的内容,建议使用char、varchar来代替。


还有text类型不用加默认值,加了也没用。而且text和blob类型的数据删除后容易导致“空洞”,使得文件碎片比较多,所以频繁使用的表不建议包含text类型字段,建议单独分出去,单独用一个表。



推荐阅读书籍


点击上方"何先振"关注并选择设为星标
各类IT技术文章不会错过!

文章转载自何先振,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论