一句话证明你懂那些char

“请说明char、varchar、nchar、nvarchar的区别是什么?”——这是一个在国际化测试人员面试过程中时常被提起的问题。不过可惜的是,能准确回答这个问题,同时又言简意赅的面试者却远比想象中的少。本文站在面试者角度,探索是否能找出一句话就能证明你懂那些char的所谓标准答案。
 
首先,需要引入两个维度来考量。 
1. 定长和变长
定长即长度固定,当输入的数据长度没有达到指定的长度时将自动以英文半角空格填充,以达到相应的长度。变长即长度不固定,以实际存储空间为准,不会以空格填充。
 
2. Unicode和非Unicode
数据库中,英文字符只需要一个字节存储,但中文和其他非英文字符,则需要两个字节存储。如果中英文同时存在,由于占用空间数不同,容易造成混乱,从而导致乱码的出现。Unicode字符集就是为了解决这种不兼容问题而产生的,它所有的字符都用两个字节表示,即便是英文字符,也占用两个字节。
 
这里以SQL Server为技术背景,将string字段可分为以下四种类型(暂不考虑text和ntext):
  • char
存储定长ANSI字符,字段上索引效率高。一旦定义了char(10),就意味着无论存储的数据是否真的达到了10字节,都要占10字节的空间,不足部分用英文半角空格补全。
  • varchar
存储变长ANSI字符,但效率没有char高。假设某个字段的值是变长的,但我们知道其最大不能超过10个字符,那么定义该字段为 varchar(10)是最合适的。另外需要注意的是varchar类型的数据长度是其值的实际长度+1。多出来的这一个字节用于保存实际使用了多大的长度。
  • nchar
存储定长Unicode字符数据,不足的部分用英文半角空格补全。
  • nvarchar
存储变长Unicode字符,包含 n个字符的可变长度 Unicode数据。n 的值须介于 1到 4000。字节的存储大小是所输入字符个数的两倍。
 
和char、varchar相比,nchar、nvarchar最多存储4000个字符,无论英文还是非英文。而char、varchar最多能存储8000个英文字符。但使用nchar、nvarchar数据类型时不用担心输入的字符是否为英文,更适应国际化开发,只是在存储数量上有些损失。
 
说了这么多,用一句话总结就是——如果没有国际化需求,定长用char,变长用varchar;需要考虑国际化,定长用nchar,变长用nvarchar。

相信只要这句话一出,面试官不让你pass也不行喽!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值