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

    (最后一句有误?)

  • 相关阅读:
    常见的消息队列中间件介绍
    关系型数据库和非关系型数据库区别、oracle与mysql的区别
    SQL Server 和 Oracle 以及 MySQL 数据库
    Redis,Memcache,MongoDb的特点与区别
    详解布隆过滤器的原理,使用场景和注意事项
    Redis缓存穿透、缓存击穿以及缓存雪崩
    RPC、HTTP、RESTful
    集群,分布式,微服务概念和区别理解
    电脑双屏变单屏后,界面显示问题
    JDK 15已发布,你所要知道的都在这里!
  • 原文地址:https://www.cnblogs.com/fengff/p/8466812.html
Copyright © 2011-2022 走看看