zoukankan      html  css  js  c++  java
  • SQL Server中char,varchar,nchar, nvarchar的区别

    这是一个比较基础的问题,但是如果长时间没有去复习,很容易忘记.

    今天重新温习一遍,记录如下:

    在讲他们的区别之前,先值得一个基本的事情:=> 英文字符和中文字符的区别

     英文字符 =》 1个英文字符只需要1个字节存储

    中文字符 => 1个英文字符需要2个字节存储

    这样,导致中文字符的存储和英文字符的存储不兼容,会有冲突。 为了解决这个问题,产生了一种Unicode字符集. 在Unicode字符集中,所有的字符(无论是英文字符,还是中文字符), 都统一使用2个字节存储.

    这就是这里nchar,nvarchar, ntext的由来,这里的第一个字母n,就是代表unicode字符集

    好了,我们一步一步来看看

    char 和 varchar的区别

    char => 存储的是定长数据, 比如char(8),

    当你存入的字符长度小于8时,它会在后面补空值,使长度达到8

    当你存入的字符长度大于8时,它会截取超出的字符,使长度只有8

    用char来存储数据,存储效率,索引效率很高,但是它占用固定空间,容易造成空间浪费

    varchar => 顾名思义,存储的是变长数据,  它存储的是字符的实际长度(但其实 varchar类型的实际长度是它的值的实际长度+1 => 这+1的这个字节用来保存实际占用了多少长度,也即存储字符的实际的长度值)

    varchar(n) => n的范围是1-8000, 也就是说可以存储最多8000个非unicode字符(比如: 8000个英文字符), 占用8000个字节.  也可以存储4000个中文字符,占用8000个字节

    显然,用varchar来存储数据,不会造成空间浪费,但是它的存储效率,索引效率都没有char高

    nchar, nvarchar

    就是我们上面说的,存储的是unicode字符, 也就是说如果用nchar, nvarchar类型,不管你存储的是英文还是汉字,都是1个字符(1个英文字符或者1个汉字字符)占用2个字节

    所以,nvarchar(n) => n的范围是1-4000,也就是说最多存储4000个unicode字符(4000个中文字符或者4000个英文字符),占用8000个字节

     

  • 相关阅读:
    Android多屏幕适配
    android应用签名详解
    内部类与静态内部类详解
    SpringBoot整合Spring Retry实现重试机制
    行为型模式之模板方法模式
    行为型模式之操作复杂对象结构(访问者模式)
    行为型模式之算法的封装与切换(策略模式)
    行为型模式之处理对象的多种状态及其相互转换(状态模式)
    行为型模式之对象间的联动(观察者模式)
    行为型模式之撤销功能的实现(备忘录模式)
  • 原文地址:https://www.cnblogs.com/wphl-27/p/13840120.html
Copyright © 2011-2022 走看看