野蛮木木原创 转载请注明出处和链接

思考SQL Server三十问之一字符类型

1. char、varchar、nvarchar之间的区别(包括用途和空间占用);xml类型查找某个节点的数据有哪些方法,哪个效率高;使用存储过程和使用T-SQL查询数据有啥不一样;

 

思考:

数据类型是最基本的东西,整形和字符又是最常用的类型;了解char/varchar/nvarchar的用途,才能设计出更好的数据结构;

 

char(n):定长,一般用于单号/ISIN/代码...当字符达不到n的长度时,后面空格补齐;空间占用n个字节

varhcar(n):不定长,这里的n是字节数,用途甚广。后面多余空格会截取只保留一个。空间占用实际长度+2

nvarchar(n):不定长,与varchar类似,这里的n可以理解成字符数,不过多为保存unicode,每个字符占用2个字节,空间占用:2*长度+2 比较浪费空间。

误区:varchar不能存储中文?其实结合不同的排序规则,varchar也一样存储中文。

ps:mysql没有nvarchar这种数据类型,在latin1也下也能存储中文,想要查询排序就需要增加其binary属性。

 

xml的数据类型,在存储序列化数据的时候比较有用,还有就是配置文件。

@xml.query()得到的结果也是xml

@xml.value()得到的结果可以转换成int/varchar等。。。

@xml.exist()检查是否包含某个节点

@xml.modify()可以修改里面的内容

效率:exist>query>value          --这只是我的理解,exist只是检查路径,query没有转换,value需要转换。

 

存储过程和T-SQL:

这个问题太多人说过了,存储过程编译过,T-SQL每次需要重新编译;而我说SP其实也是T-SQL的一部分。

 

 

以上,关于第一题的思考。不足之处还望指出。

参考:

online book->data type

xml data type methods

野蛮木木的博客

posted on 2012-05-17 00:45  野蛮木木  阅读(415)  评论(0)    收藏  举报