请认真对待数据库中的char 与varchar

做完学生管理系统的那会,发现一个问题。用户名后加了几个空格有时候照样可以登录系统,这可是我们想要的。下面就这个问题说下char与varchar的区别吧

先说下他们的工作方式

Char 是固定长度的字符型,varchar是可变长度的字符。举个例子,比如设定两个字段

CardID char(10), StuID varchar(10).当给这连个字段插入数据时,

输入数据

char类型的字段内容

varchar类型的字段内容

aaa

aaa  

(aaa后面还有7个空格)

aaa

(aaa后面没有空格)

aaabbb

aaabbb

aaabbb

aaabbbcccccc

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

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

 

由上表可以看出,对于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,比如密码。

 

 

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 29
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值