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有可能导致大量的存储空间的浪费。

    (最后一句有误?)

  • 相关阅读:
    Java成神之路技术整理(长期更新)
    WEB攻击手段及防御第1篇-XSS
    JSON是什么,为什么这么流行?
    常用的 7 款 MySQL 客户端工具,你值得拥有!
    Spring的核心思想,总结得非常好!
    到底什么级别才算是高并发?
    非常详尽的 Shiro 架构解析
    7 种 JVM 垃圾收集器,看完我跪了。。
    电商那些年,我摸爬打滚出的高并发架构实战干货
    Spring Boot 把 Maven 干掉了,拥抱 Gradle!
  • 原文地址:https://www.cnblogs.com/fengff/p/8466812.html
Copyright © 2011-2022 走看看