关于数据库中char类型与varchar类型的适用情况对比


 引言:数周前的某一天,在检查公司新来实习生的学习日记的过程中偶然中发现他对于这两种数据类型的记录有种对char类型的特殊偏爱,无奈并没有找到比较满意的对比文章,遂决定写下此文,欢迎广大网友多多交流多多指教,以下仅代表个人观点。
 其实两种类型各有自己的适用情况及优缺点,要根据实际情况选择适合的 而非一概而论。
 网上大部分的对比是这样说的,char类型的查询速度相对于varchar来说更快,而varchar呢则相对于char来说更省空间。当然这都是要使用控制变量法才能说明问题,如果同时有几个变量变化的对比则没什么意义。例如说在数据完全相同的情况下char类型的查询速度相对于varchar快,这自然毋庸置疑;但如果数据完全相同的情况下varchar相对于char来说更省空间吗,显然不一定,这个前提必须还要加上char中的存储数据长度小于定义的长度的情况下。例如char(1)和varchar(1)中都存储了性别这个字段,那么两者所占的空间显然是相同的,而如果同时是char(2)和varchar(2)的话则显然是varchar(2)中所占的空间少一半,因为varchar(2)长度为动态的存储几个字符就是几个字符的长度, 而char(2)中的则是定长 不足的部分会被空格填充。看到这里很多人就会质疑我了,明明我char类型查出来的也没有空格呀,那你就要看看你用的什么数据库系统了,如果你用的是mysql那么你看不到显然是正常的,因为mysql内部似乎自动帮你处理了,而使用sql server的同学就不会有此质疑,下面我们就来看看吧。

1.在mysql中测试

1.1.在mysql中新建stu表

关于数据库中char类型与varchar类型的适用情况对比

1.2.添加一条数据并查询

关于数据库中char类型与varchar类型的适用情况对比
 那么说好的定长呢???莫非文档是骗人的吗,显然不是,只是在读取数据的时候自动帮你去掉了结尾的空格而已。

1.3 测试条件查询

关于数据库中char类型与varchar类型的适用情况对比

2.在sql server中测试

2.1 在sql server 中创建stu表

关于数据库中char类型与varchar类型的适用情况对比

2.2添加一条数据并查询

关于数据库中char类型与varchar类型的适用情况对比
 结果就是这样,sql server可没有闲心去帮你处理结尾的空格。

2.3测试条件查询

关于数据库中char类型与varchar类型的适用情况对比
 ???那么问题又来了 你明明没有帮我处理空格为啥还是查出来了呢,看来还是帮忙处理了一部分了的,至少对比的时候帮忙处理了,所以还算不是太狠心;那么我们如果把数据拿到高级语言的里面去比对呢,那么很抱歉你就必须要自己去去除空格了。不过这是好还是不好呢,这里有的同学就要说了 你要不处理就都不处理呀,你这样搞得我很难受的耶,一会处理一会不处理的 ,的确呀,我很赞成这位同学的观点。

3.总结

 最后对于这两种数据存储类型该如何抉择呢。
 对于使用mysql数据库的童鞋来说好像两者用起来并没有什么区别,而对于使用sql server的童鞋来说就必须要好好注意这一点。但是使用mysql 的同学难保哪一天忽然项目需要你用上sql server了咋办,所以一劳永逸的办法就是使用合适的数据类型来存储,char类型一定要在我们数据长度固定的时候使用,而且长度一定要设计得和我们存储的数据字符长度相同才行。如果仅仅为了提高一点的查询速度而将变长数据设计为char类型来存储,则势必会给后端程序员会带来处理字符串中空格的时间和精力的代价,行行好吧我们的数据库设计师们,程序员何苦为难程序员呢!!!

更多技术问题请加入QQ群(群号1042665377)一起交流吧:

关于数据库中char类型与varchar类型的适用情况对比