关于数据库里面的字符存储类型的一些简要说明。
char,varchar,nchar,nvarchar这四种类型总是傻傻分不清楚,不经常用的话临时想起来可能会忘了,做点笔记,找起来容易。
先说“n”吧,就是Unicode字符集,这种编码方式可以很好的解决中英文字符的存储冲突,即解决乱码问题。都是采用两个字节存储,ncahr(N),N的值在[1,4000],所以最大为8000个字节。
char(N),N的值在 [1,8000],这种存储并没有采用Unicode字符集的方式(好像是句废话~),英文字符一个字节,中文两个字节,这种方式在一些中英文都有而且很多的数据存在情况下,数据很容易因为中英文的存储空间不同导致乱码。
var,即variable缩写,可变的(这里我直接想到了 VLSM,变长子网掩码,有兴趣的朋友可以去搜搜看,挺好玩的),就是说即使你给每个数据的数据类型都写 VARCHAR(8000) 或 NVARCHAR(4000),最后的实际分配给每个具体数据的存储空间还是根据其本身大小来分配。例如
if exists(select 1 from sysdatabases where name='UserInfo')
drop table UserInfo
create table UserInfo(
id int primary key not null,
name varchar(8000),
desc nvarchar(4000),
...
age int
)
然后插入数据
insert into UserInfo(id,name,desc,age)values
(1,"sunyelw","programer阳",22)
插入后 name列“sunyelw”的存储大小为7(7*1)个字节,desc列“programer阳”存储大小为20(9*2+1*2)个字节。
总结:当你确定数据长度,只有英文,用char;
当你确定数据长度,只有中文 或 中英文都有,用nchar;
当你不确定数据长度,只有英文,用varchar;
当你不确定数据长度,只有中文 或 中英文都有,用nvarchar。
注意一点,“n”这个Unicode字符集弄出来就是为了存储中文字符的,所以如果有中文的话,建议数据类型为nchar或nvarchar。
有不足或不当之处,还请各位指正。
好饿~ 还是要专心做事分散注意力,12点才开饭[大哭]。。