IT修真院_JAVA

VARCHAR类型的长度怎么确定?和TEXT和LONGTEXT的

2018-03-23  本文已影响232人  素履之往_3e36

大家好,我是IT修真院深圳分院第5期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,修真院官网JAVA任务1中,VARCHAR类型的长度怎么确定?和TEXT和LONGTEXT的区别是什么。

一、背景介绍

VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据,但是VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。因此,对于那些难以估计确切长度的数据对象来说,使用VARCHAR数据类型更加明智。MySQL4.1以前,VARCHAR数据类型所支持的最大长度255,5.0以上版本支持65535字节长度,utf8编码下最多支持21843个字符

二.知识剖析

1.Varchar与char的区别

假如你向一个长度为四十个字符的VARCHAR型字段中输入数据Bill Gates。当你以后从这个字段中取出此数据时,你取出的数据其长度为十个字符——字符串Bill Gates的长度。 假如你把字符串输入一个长度为四十个字符的CHAR型字段中,那么当你取出数据时,所取出的数据长度将是四十个字符。字符串的后面会被附加多余的空格。

varchar:存储变长数据,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。

2.

4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节) ;5.0版本以上,varchar(20),指的是20字符,无论存放的是数字、字母还是UTF8汉字(每个汉字3字节),都可以存放20个。最大可以存放65532字节的数据,因为虽然varchar数据类型的长度支持到了65535,但是起始位和结束位占去了3个字节

3.

text:存储可变长度的非Unicode数据,最大长度为2^16-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入

Unicode数据:世界统一编码,与字符集无关。非Unicode数据:只要字符集变了,数据就出现乱码,无法使用。

LongText 最大长度4294967295个字元 (2^32-1),也就是4个G

三.常见问题

1.定义varchar字段时,到底定义成多长

2.什么时候使用char,varchar,text

四.解决方案

1.根据需求与实际情况来考虑,不能千篇一律。 比如:用户名,谁的名字会有255/3=85个字符?所以也没必要那么长,但又不能定义成CHAR(),所以给个够用的长度varchar(20)或更少varchar(10)即可,考虑少数民族可以长点。 varchar的长度,最好是在够用(需要适当预测未来需求)且方便管理的前提下尽可能短。

2.经常变化的字段用varchar;知道固定长度的用char;尽量用varchar;超过255字节的只能用varchar或者text;能用varchar的地方不用text;(效率上: char>varchar>text)。

能够用数字类型的字段尽量选择数字类型而不用字符串类型的(电话号码),这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了

五。编码实战

七、参考文献

百度,书籍

八.更多讨论

1.如果varchar插入的数据有空格的话,空格会留存吗?

答:会的,并且占用空间,已经在代码实战里面演示过,具体可参见小视频。

2.数据长度超出varchar(M)长度,能插进去吗?

答:能插进去,但是会有缺失,会缺少后面的数据。假如插入修真院三个字,varchar只有(2)的时候,那么只能插进去修真两个字,院字会缺失。

3.一个汉字占用几个字节?

答:这个要看编码情况,如果是GBK编码的话,会占用两个字节。如果是UTF-8编码的话,会缺失三个字节。

腾讯视频

感谢大家观看

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

技能树.IT修真院

“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~

我的邀请码:19214843,

或者你可以直接点击此链接:http://www.jnshu.com/login/1/19214843

上一篇下一篇

猜你喜欢

热点阅读