博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
认真对待数据库中char和varchar
阅读量:7058 次
发布时间:2019-06-28

本文共 1180 字,大约阅读时间需要 3 分钟。

hot3.png

       大家现在都在做或者做完了机房收费系统,其中创建数据库阶段,会涉及到数据类型的设置,大家都有所了解了,那么我们来讨论一下其中的Char和Varchar的区别吧。

 

先说一下它们的工作方式:

Char是固定长度的字符型,VarChar是可变长度的字符型。什么意思呢?我们举个例子。比如设定了2个字段:CardID char(6) ,StuID varchar(6)。当给这2个字段插入数据时:(这里用的是SQL Server 2005)

 

输入数据

char类型的字段内容

varchar类型的字段内容

aaa

aaa  

(aaa后面还有3个空格)

aaa

(aaa后面没有空格)

aaabbb

aaabbb

aaabbb

aaabbbccc

出错,将截断字符串或二进制数据

 出错,将截断字符串或二进制数据

 

       由上表可以看出,对于char类型的数据来说,如果添加的字符长度不够,SQL自动用空格补齐,而varchar则不会自动补空格。也就是说char类型的数据长度 = 定义的长度,而varchar类型的数据长度 <= 定义的最大长度。

 

       char类型,固定字长,效率高,但是会比varchar多占用空间;varchar类型,可变字长,节省空间,但是效率比char稍差。

 

       由于它们的特性,决定了它们的使用情况:

 

       char使用会比varchar多些。我们不是太缺空间,而且高效率会提高我们的产品的认可率。这就是数据库设计中常用到的“以空间换效率”。此外, varchar 虽然比char节省空间,但是如果一个varchar列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(Row Migration)现象(Oracle中较为明显),而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar效果会更好一些。

 

      但是用char时要时刻注意空格问题。由于char会自动补齐空格,所以在输入数据长度小于定义的最大长度时,输入"a" 和输入"a "是一样的。因为它们最终后面会补齐空格而变成相同的内容。假如该列有主键约束或者唯一性约束,那么就会发生错误,因为违反了“实体完整性”约束。当然如果没有这些约束,同样也会出现错误。就拿我们刚做的机房收费系统的登录模块来说吧,如果把密码定义成了char类型,那么把设定密码为“admin  ”,而我用“admin”可以顺利登录,这显然不是用户想看到的。追求效率是对的,但是前提是保证其正确性。所以我认为一些特定的必须要用varchar,比如密码。

 

       char与varchar其实是一对矛盾的统一体,两者是互补的关系。我们要认真对待,切实选择!

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2260184/blog/518501

你可能感兴趣的文章
Hadoop真的要死了吗?
查看>>
《架构师(“拥抱2015”特刊)》发布
查看>>
百度开源AI硬件开发平台BIE-AI-Box和BIE-AI-Board
查看>>
“The Stupidity Paradox”作者访谈
查看>>
RedHat宣布支持Azure、.Net Core 2.0和SQL Server 2017
查看>>
苹果发布Core ML 2
查看>>
iOS业务组件化框架 Axe
查看>>
在敏捷中应用测试驱动开发
查看>>
IBM发布Open Liberty 18.0.0.4,支持MicroProfile 2.1和反应性扩展框架
查看>>
听云CTO访谈:解读现代应用性能管理(APM)技术
查看>>
Java EE Security API(JSR-375)获得通过
查看>>
Linux学习笔记
查看>>
Visual Studio 2017 15.9预览版3支持ARM64 for UWP
查看>>
GitHub推出Scientist,帮助开发者重构关键路径代码
查看>>
跨平台移动应用开发的优势与不足
查看>>
Java EE守护者将推动Jakarta EE的发展
查看>>
Apache Kylin在绿城客户画像系统中的实践
查看>>
通过jsonp获取json数据--实现AJAX跨域请求
查看>>
使用gRPC构建真实世界的微服务
查看>>
建立自组织敏捷团队
查看>>