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个字节

     

  • 相关阅读:
    Invalid character found in the request target.The valid characters are defined in RFC 7230 and RFC3986
    Calendar的用法
    spring boot+mybatis+mysql增删改查分页
    HIVE-利用ow_number() OVER(PARTITION BY)函数介绍求TOP-K
    Sqoop-从hive导出分区表到MySQL
    Sqoop--Free-form Query Imports 自由查询模式下$CONDITIONS关键字的作用
    HIVE-执行hive的几种方式,和把HIVE保存到本地的几种方式
    HIVE-分桶表的详解和创建实例
    HIVE-几道经典的hive题目
    HIVE-如何查看执行日志
  • 原文地址:https://www.cnblogs.com/wphl-27/p/13840120.html
Copyright © 2011-2022 走看看