【转】sqlserver中varchar和nvarchar的⽤法
varchar在SQL Server中是采⽤单字节来存储数据的,nvarchar是使⽤Unico来存储数据的.中⽂字符存储到SQL Server中会保存为两个字节(⼀般采⽤Unico编码),英⽂字符保存到数据库中,如果字段的类型为varchar,则只会占⽤⼀个字节,⽽如果字段的类型为nvarchar,则会占⽤两个字节.
正常情况下,我们使⽤varchar也可以存储中⽂字符,但是如果遇到操作系统是英⽂操作系统并且对中⽂字体的⽀持不全⾯时, 在SQL Server存储中⽂字符为varchar就会出现乱码(显⽰为??).⽽且正常情况下,主机都会⽀持中⽂的环境,所以如果使⽤varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.varchar2最大长度
但是!如果布署的主机是英⽂操作系统,并且不⽀持中⽂环境,那问题就出来了.所有的varchar字段在存储中⽂的时候都会变成乱码(显⽰为??).⽽且⼀般情况下你不会知道这是因为你采⽤了错误的数据类型来存储所造成的,你会试着去装中⽂字体,试着去设置操作系统的语⾔环境...这些都不能解决问题,唯⼀能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项⽬管理⽐较熟悉的朋友应该都知道,到布署阶段再来修改数据库是⼀个很恐怖的事情.
使⽤nvarchar的另⼀个⾮常好处就是在判断字符串的时候可以不需要考虑中英⽂两种字符的差别.
当然,使⽤nvarchar存储英⽂字符会增⼤⼀倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使⽤nvarchar来存储数据.只有在你确保该字段不会保存中⽂的时候,才采⽤varchar来存储.
1、CHAR。CHAR存储定长数据很⽅便,CHAR字段上的索引效率级⾼,⽐如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。
2、VARCHAR。存储变长数据,但存储效率没有CHAR⾼。如果⼀个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这⼀个字节⽤于保存实际使⽤了多⼤的长度。
从空间上考虑,⽤varchar合适;从效率上考虑,⽤char合适,关键是根据实际情况到权衡点。
3、TEXT。text存储可变长度的⾮Unicode数据,最⼤长度为2^31-1(2,147,483,647)个字符。
4、NCHAR、NVARCHAR、NTEXT。这三种从名字上看⽐前⾯三种多了个“N”。它表⽰存储的是Unicode数据类型的字符。我们知道字符中,英⽂字符只需要⼀个字节存储就⾜够了,但汉字众多,需要两个字节存储,英⽂与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼
容的问题⽽产⽣的,它所有的字符都⽤两个字节表⽰,即英⽂字符也是⽤两个字节表⽰。nchar、nvarchar的长度是在1到4000之间。和char、varchar⽐较起来,nchar、nvarchar则最多存储4000个字符,不论是英⽂还是汉字;⽽char、varchar最多能存储8000个英⽂,4000个汉字。可以看出使⽤nchar、nvarchar数据类型时不⽤担⼼输⼊的字符是英⽂还是汉字,较为⽅便,但在存储英⽂时数量上有些损失。
所以⼀般来说,如果含有中⽂字符,⽤nchar/nvarchar,如果纯英⽂和数字,⽤char/varchar
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论