zoukankan      html  css  js  c++  java
  • 数据库之char vchar nchar nvchar的区别

    转自:http://blog.csdn.net/a11112244444/article/details/51475107

    首先介绍一下定长或变长

    所谓定长就是长度固定的,当输入的数据长度没有达到指定的长度时将自动以英文空格在其后面填充,使长度达到相应的长度;有var前缀的,表示是实际存储空间是变长的,比如varchar,nvarchar变长字符数据则不会以空格填充,比较例外的是,text存储的也是可变长。

     

    举例:用varchar(5)存储字符串“abc”,只占用3个字节的存储空间,而用char(5)存储,则占用5个字节(“abc  ”

    nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈"“abcdef”......

     

    再介绍一下Unicode或非Unicode

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

     

    PsVARCHAR类型的实际长度是它的值的实际长度+1。为什么"+1"呢?这一个字节用于保存实际使用了多大的长度


    总结

    空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

    所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,char/varchar

    charvarchar性能差距是很小的,可以考虑忽略不计。

    在大数据量应用中,使用charnvarchar有可能导致大量的存储空间的浪费。

    (最后一句有误?)

  • 相关阅读:
    C# 填充客户端提交的值到T对象
    mvc中hangfire全局简单配置
    mvc企业微信开发全局配置
    js获取简单表单对象(1)
    MVC伪静态路由简单搭配
    [转]一些实用的图表Chart制作工具
    【转】SQL Server 数据库内部版本号
    SVN的搭建和使用总结
    解决ext时间插件在谷歌下变宽的BUG
    Hibernate中Session.get()/load()之区别
  • 原文地址:https://www.cnblogs.com/fengff/p/8466812.html
Copyright © 2011-2022 走看看