sqlserver数据库数据类型中varchar和nvarchar的区别


nvarchar   和   varchar   的区别是存储方式不同 
varchar是按字节存储的。而带nvarchar是按字符存储的 
比如说varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符。
nvarchar每个字符占用2个字节, nvarchar(40),就可以存储40个中文字符。nvarchar要相对于存储的字符类型。比如有些字符是占3个字节的。 

同样的,char和nchar也一样道理。

varhchar char 区别:char存储的是固定长度如‘abc’按char(10)存储的是10个字节,按varchar(10)是3个字节

关于使用:
每个数据库在建立的时候都要指定一个 Collation, 建立好的数据库你可以在属性页里看到。Collation 的选择决定了你的数据库数据的存储格式,还有大小写敏感等,其中些是 Chinese 有关的 Collation, 当选择了这些 Collation 后,你的数据库中所有的表都可以自动支持 Unicode 而不需要再选择nVarchar了。但是假如你选择了 Latin 有关的 Collation, 这时候 Varchar 字段就不能存储中文了,所以你只能选择nVarchar 字段类型。
也就是说通常我们应该使用Chinese有关的Collation,并在需要中文字符串时尽量使用nvarchar;
有时既有varchar又有nvarchar时会有性能问题; 例如 非Unicode字符串的列,使用Unicode字符串的查询条件查询时,查询结果会执行表扫描而不是使用索引。  
  • 也就是说使用varchar存储Unicode字符(比如中文),在查询时(必定也会是Unicode条件),会执行表扫描,而不执行索引会明显影响性能;如果不指定collation,那么在英文操作系统上指定的varchar类型的就显示不出来了。这里还有一个问题就是,虽然在不指定collation时,nvarchar可以兼容中英文,但是占用空间大了一倍。
  • 所以,最佳方案是
  • 有中文时:指定collation如 collation Chinese_PRC_CI_AS,用nvarchar这样既省了空间,有不会出错
  • 英文时:制定collation为latin的用varchar
中文默认使用 Chinese_PRC_CI_AS
附:unicode和ascii区别: ASCII就是编码英文的26个字母和一些常见的符号,之后扩展了一半。总之是一个字节来做编码,大于128的部分是一些特殊符号。但ASCII是无法编码别的东西的,比如说是不存在“中文的ascii码需要2个字符”这种说法的。ASCII就只有一个字节。Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包括了。Unicode本身是只有2个字节的,之所以出现UTF-8,UTF-16等等之类,那是为了针对不同的应用环境,提高整体编码效率,比如如果某篇文章里绝大部分是英语(单字节就能表示),就比较适合使用utf-8,而如果绝大部分是中文(需要双字节),可能就utf-16比较合适了。

《转》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle、MySQL和SQL Server是三种常见的关系型数据库管理系统(RDBMS),它们在数据类型方面存在一些区别。以下是它们主要的数据类型及其区别: 1. 字符串类型: - Oracle:包括CHAR、VARCHAR2、NCHAR、NVARCHAR2等。 - MySQL:包括CHAR、VARCHAR、TINYTEXT、TEXT、LONGTEXT等。 - SQL Server:包括CHAR、VARCHAR、NCHAR、NVARCHAR、TEXT等。 2. 数值类型: - Oracle:包括NUMBER、INTEGER、FLOAT、DOUBLE PRECISION等。 - MySQL:包括INT、BIGINT、FLOAT、DOUBLE等。 - SQL Server:包括INT、BIGINT、FLOAT、REAL等。 3. 日期和时间类型: - Oracle:包括DATE、TIMESTAMP、INTERVAL等。 - MySQL:包括DATE、TIME、DATETIME等。 - SQL Server:包括DATE、TIME、DATETIME等。 4. 二进制类型: - Oracle:包括BLOB、RAW等。 - MySQL:包括BLOB、BINARY等。 - SQL Server:包括BLOB、BINARY等。 5. 布尔类型: - Oracle:不支持原生的布尔类型,可以使用NUMBER(1)或CHAR(1)来表示。 - MySQL:支持BOOL或BOOLEAN类型。 - SQL Server:不支持原生的布尔类型,可以使用BIT来表示。 6. 其他特殊类型: - Oracle:包括CLOB(大文本)、BFILE(二进制文件)等。 - MySQL:包括ENUM、SET等。 - SQL Server:包括XML、CURSOR等。 需要注意的是,尽管这些数据库有一些相同的数据类型,但在具体实现和功能上可能存在一些差异。此外,每个数据库还可能支持一些特定的扩展类型或自定义类型。 在选择数据库和设计表结构时,应该根据具体的应用需求和数据库的特性来选择合适的数据类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值