zoukankan      html  css  js  c++  java
  • SQL Server中字符串型和Unicode字符串型的区别(网摘+书摘的整理)

    SQL  Server中字符串型和Unicode字符串型的区别

     标签: 

    sqlserver 

    数据库

    分类: SqlServer
    看书时感觉字符串型(varchar等)和Unicode字符串型(nchar等)很让人费解;花了一点时间,以下是网摘和书摘的整理:
     
    例如 varchar 和 nvarchar :
    nvarchar   和   varchar   的区别是存储方式不同 
    varchar是按字节存储。而带nvarchar是按字符存储
    比如说varchar(40),能存储40个字节长度的字符,存储中文字符的时候,因为中文字符1个字符就等于2个字节.所以varchar(40)只能存储20个中文字符。
    nvarchar每个字符占用2个字节,nvarchar(40),就可以存储40个中文字符。nvarchar要相对于存储的字符类型。比如有些字符是占3个字节的。 
    同样的,char和nchar也一样道理。
     
     
    关于长度超过4000的Unicode字符串或超过8000的ASCII字符串:
    不推荐使用ntext或text,应使用nvarchar(max)和varchar(max)替代text;
             text和ntext未来将被微软废弃。
     
    关于使用:
    每个数据库在建立的时候都要指定一个 Collation, 建立好的数据库你可以在属性页里看到。Collation 的选择决定了你的数据库数据的存储格式,还有大小写敏感等,其中些是 Chinese 有关的 Collation, 当选择了这些 Collation 后,你的数据库中所有的表都可以自动支持 Unicode 而不需要再选择nVarchar了。但是假如你选择了 Latin 有关的 Collation, 这时候 Varchar 字段就不能存储中文了,所以你只能选择nVarchar 字段类型。
    也就是说通常我们应该使用Chinese有关的Collation,并在需要中文字符串时尽量使用nvarchar;
    有时既有varchar又有nvarchar时会有性能问题;例如 非Unicode字符串的列,使用Unicode字符串的查询条件查询时,查询结果会执行表扫描而不是使用索引。  
    • 也就是说使用varchar存储Unicode字符(比如中文),在查询时(必定也会是Unicode条件),会执行表扫描,而不执行索引, 会明显影响性能;
    使用varchar字符串类型作为nvarchar列的查询条件则应该不会有问题,系统会自动将varchar转换为Unicode字符。
     
    中文默认使用 Chinese_PRC_CI_AS
     
  • 相关阅读:
    LRU
    c++ 在临时变量上使用const引用
    剑指 Offer 13. 机器人的运动范围
    C++之对象包含与成员函数不兼容的类型限定符
    C#獲取指定格式日期
    在ORACLE產生001,002的流水號
    ASP.NET中DataList数字分页代码
    生成條碼標的Class
    sql 将横的记录显示为竖的记录 max(case when CASE ltrim(ps.SIZE) WHEN '4.5' THEN ps.PairPerCarton END is null then null else ps.PairPerCarton end ) AS [4.5]
    为什么margin-top值不是作用域父元素
  • 原文地址:https://www.cnblogs.com/scottgu/p/2264978.html
Copyright © 2011-2022 走看看