思考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
野蛮木木的博客