【转】varchar,nvarchar长度、性能、及所占空间分析
varchar(n),nvarchar(n) 中的n怎么解释:
nvarchar(n)最多能存n个字符,不区分中英⽂。
varchar(n)最多能存n个字节,⼀个中⽂是两个字节。
所占空间:
nvarchar(n)⼀个字符会占两个字节空间。
varchar(n)中⽂占两字节空间,英⽂占⼀个。
n的取值范围:
nvarchar(n) n的范围是:1与4000之间
varchar(n) n的范围是:1与8000之间
n的⼤⼩是否会影响性能:
varchar及nvarchar⾥的长度 n 不会影响空间⼤⼩及性能。除⾮n是max并且内容⼤于4000或8000
设置n更多的是业务需要,如限制⾝份证只能输⼊18位,再多就报错,或者防⽌恶意攻击撑爆硬盘。对空间及性能都没有影响
n设置多⼤⽐较好:
既然对空间及性能都没有影响,那我们只要考虑业务需要就可以了,我分析过微软的数据库,⼤都设置为:256,也会看到
64,128,512,max等,可能是便于记忆吧。
varchar(n),nvarchar(n)存储空间举例解释:
包含 n 个字符的可变长度 Unicode 字符数据。字节的存储⼤⼩是所输⼊字符个数的两倍。
两字段分别有字段值:我和coffee
那么varchar字段占2×2+6=10个字节的存储空间,⽽nvarchar字段占8×2=16个字节的存储空间。
如字段值只是英⽂可选择varchar,⽽字段值存在较多的双字节(中⽂、韩⽂等)字符时⽤nvarchar。
varchar和nvarchar如何选择?
varchar在SQL Server中是采⽤单字节来存储数据的,nvarchar是使⽤Unicode来存储数据的.中⽂字符存储到SQL Server中会保存为两个字节(⼀般采⽤Unicode编码),英⽂字符保存到数据库中,如果字段的类型为varchar,则只会占⽤⼀个字节,⽽如果字段的类型为nvarchar,则会占⽤两个字节.
正常情况下,我们使⽤varchar也可以存储中⽂字符,但是如果遇到操作系统是英⽂操作系统并且对中⽂字体的⽀持不全⾯时, 在SQL Server存储中⽂字符为varchar就会出现乱码(显⽰为??).⽽且正常情况下,主机都会⽀持中⽂的环境,所以如果使⽤varchar来存储数据,在开发阶段是发现不了的.多数情况下,在布署的时候也不会有问题.
但是!如果布署的主机是英⽂操作系统,并且不⽀持中⽂环境,那问题就出来了.所有的varchar字段在存储中⽂的时候都会变成乱码(显⽰为??).⽽且⼀般情况下你不会知道这是因为你采⽤了错误的数据类型来存储所造成的,你会试着去装中⽂字体,试着去设置操作系统的语⾔环境...这些都不能解决问题,唯⼀能解决问题的是把数据库字段的类型个性为nvarchar(或者nchar).对项⽬管理⽐较熟悉的朋友应该都知道,到布署阶段再来修改数据库是⼀个很恐怖的事情.
使⽤nvarchar的另⼀个⾮常好处就是在判断字符串的时候可以不需要考虑中英⽂两种字符的差别.
当然,使⽤nvarchar存储英⽂字符会增⼤⼀倍的存储空间.但是在存储代价已经很低廉的情况下,优先考虑兼容性会给你带来更多好处的.
所以在Design的时候应该尽量使⽤nvarchar来存储数据.只有在你确保该字段不会保存中⽂的时候,才采⽤varchar来存储.
unicode字符转中文
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论