首页 > 编程知识 正文

varchar和nvarchar区别,数据库varchar和nvarchar

时间:2023-05-06 08:39:16 阅读:222766 作者:2017

文章目录 写在前面一、nvarchar是什么?二、nvarchar与varchar的区别1.varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长度类型2.它们两者的最大长度不一样3.varchar能存储的字节数就是它的长度,nvarchar能存储的字节数是它的长度数乘2 扩展总结


写在前面

笔者今天在阅读一份数据库设计时观察到表中大量使用了nvarchar这一类型,发现自己对nvarchar了解的太少,比如它是什么类型,和varchar的区别,为什么这份数据库设计中多次使用到它,有什么优点和缺点


在这里,把自己找寻答案的过程记录下来

一、nvarchar是什么?

nvarchar(n)是包含n个字符的可变长度Unicode字符数据。n的值必须介于1与4000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
nvarchar在存储时,无论全角还是半角,每个字符都占用两个字节。在定义时,无论全角或是半角,都是定义字符个数而不是字节数。最多显示4000个字符。是Unicode标准字符集。这时再回顾一下UNICODE字符编码集


Unicode字符集:字符中,英文字符只需要一个字节存储就足够了,但汉字和其他众多非英文字符,则需要两个字节存储。如果英文与汉字同时存在,由于占用空间数不同,导致读取出来的字符串是乱码。Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。

二、nvarchar与varchar的区别 1.varchar是非Unicode可变长度类型,nvarchar是Unicode编码可变长度类型

我发现可以把char、nchar、varchar、nvarchar四种类型放在一起对比看看。
char、nchar是定长,如果没达到指定的长度时将自动以英文空格在其后面填充。优势在于速度较高。
varchar、nvarchar属于变长,如果没有达到指定的长度时,不会自动以英文空格在其后面填充。优势在于占容量较小。
前面也说到了Unicode字符集的优势,解决了英文和汉字同时存在时的乱码现象。

2.它们两者的最大长度不一样

nvarchar的最大值是4000,varchar的最大值是8000.

3.varchar能存储的字节数就是它的长度,nvarchar能存储的字节数是它的长度数乘2

如nvarchar(10),就是Unicode字符占用10个字节。那么无论是英文还是汉字,都只能存5个。

扩展 数据类型描述char(n)定长,索引效率高,程序里使用trim去除多余的空白,n必须是一个介于1和8000之间的数值,存储大小为n个字节varchar(n)变长,时间效率没char高,空间分配灵活,n必须时一个介于1和8000之间的数值。存储大小为输入数据的字节的实际长度,而不是n个字节text(n)变长,非Unicode数据nchar(n)定长,处理Unicode数据类型(所有的字符都使用两个字节表示),n的值必须介于1和4000之间。存储大小为n字节的两倍nvarchar(n)变长,处理Unicode数据类型(所有的字符都使用两个字节表示),n的值必须介于1和4000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零ntext(n)变长,处理Unicode数据类型(所有的字符都使用两个字节表示)总结

那么实际开发中,如何选择更好呢:
有人说,varchar比nvarchar更省空间,应该更多的用varchar。但笔者认为应该结合实际应用环境,当空间足够时不必太纠结于空间。还有考虑到操作系统基本上内部解析都适用Unicode编码的,使用了nvarchar便可以避免吗每次从数据库读取或写入的时候进行编码转换,转换需要时间,并很容易出错。且nvarchar支持多种语言,所以我猜想这便是笔者正在看的数据库设计文档中设计者大量选用nvarchar的理由之一。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。