发表于: 2017-08-11 20:49:54
1 906
一、今日完成
上午整理电脑里资料,上传备份到百度云盘。
今天下午准备Java小课堂,讲解task1深度思考问题“12.varchar类型的长度怎么确定?有什么样的原则,和Text和LongText的区别是什么?”小课堂主要内容如下:
一、背景介绍
字符型数据
char(n) /*fixed-length*/
varchar(n) /*variable-length*/
char列可以设置的最大长度为255个字节,而varchar列最大可以存储65535个字节(MySQL5.0及以上版本)。基本拉丁字母、数字和标点符号使用一个字节,其他语言如汉语、日语、扩展的拉丁字母和希腊语等每个字符的存储需要多少字节由字符集确定。
文本型数据
如果需要存储的数据超过64KB(65535字节),需要使用文本类型,常见如下所示。
tinytext(255) 、text(65535) 、mediumtext(16777215) 和longtext(4294967295)。
注意:装入的数据超过该类型的最大长度,数据被截断。
二、知识剖析
1.varchar(n) MySQL4.0版本以下,指的是n字节;5.0版本以上,指的是n字符,无论存放的是数字、字母还是汉字都可以存储20个,把n视为存储空间最大值并且只使用存储字符串实际需要的长度。
2.在 MySQL5.0以上的版本中,varchar数据类型支持的最大长度是65535字节。但是由于起始位和结束位占去了3个字节,即可用的最大存储空间是65532个字节(UTF8字符集下21843个汉字)。VARCHAR保存形式为前缀+数据;前缀用1到2个字节表示实际长度,超过255时需要2个字节。
字节长度=前缀位数+∑(1/2+字符数*相应字符所需的存储空间)
Varchar与text longtext的区别
1. 最大存储空间不同
Varchar和text是65535字节,即64KB,
Longtext是4294967295字节,即4GB
2. varchar会使用1-2个字节的前缀来存储长度,text和longtext不会.
3. Text和longtext不需要指定存储位数,如下所示:
curriculum vitae Varchar(500);
curriculum vitae Text;
三、代码实战
1)查看服务器支持的字符集
Show character set;
2) 新建一个测试表test_char.,只有一个varchar类型的列。长度为10
SQL> create table test_char(colA varchar(10));
3 )向这个表中插入一些数据。
SQL> insert into test_varchar values('a');
SQL> insert into test_varchar values('aa');
SQL> insert into test_varchar values('修真院欢迎你!');
insert into test_varchar values('abcdefghijkk'); (error!)
六、扩展思考
在一个表里,将某列的数据类型分别设置为varchar和text,查找效率是否受到影响?为什么
在最后的讨论环节,在text类型与varchar类型对性能的影响这个问题,各位师兄因为以前使用text型数据的经验很少,而且对于不同数据类型的存储空间大小和存储方式一直关心较少,所以未能给出扩展思考的解答。计划自己去建立实例去测试看看。
二、明日计划
1)上午看Oracle提供JDBC文档,系统学习JDBC相关知识,把这个知识点彻底攻克。
2)下午和晚上敲代码,做万task1最后三步。
i.测试一下不关闭连接池的时候,在Main函数里写1000个循环调用会出现什么情况。
ii.测试一下连接DB中断后TryCatch是否能正常处理。
iii.检查一下自己的代码是否符合规范,如果DB的表格有改动,应该改哪些内容,需要多久。
三、遇到的问题
为什么在mysql中越来越多使用varchar类型数据,而较少使用text类型?
四、收获
1.今天在小课堂讨论环节,不少师兄对问题各抒己见,互相交流想法,不管是主讲人还是听众,都可以从中汲取不少的干货;反观自己,以前遇到其他学员讲解小课堂都是不管不顾,把它当作耽误时间和精力的负担,似乎完全没能认识到小课堂活动开展的初衷。决意从今日起改变以往做法,主动去听其他学员的小课堂,积极参与课后讨论,勾搭各路师兄和师弟。
2.今天上午,张鑫师兄专门讲了作为小白进入修真院 学习需要怎样的期望和应该学习怎样的具体的学习方法,收益颇多,特别感谢!
评论