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

     

  • 相关阅读:
    多重背包 HDU2191
    带限制求最小价值的完全背包 HDU1114
    均分背包 HDU1171
    经典01背包问题 HDU2602
    记忆化搜索 POJ1579
    最大递增子序列变形——二维带权值 O(n*n) HDU1069
    最大递增子序列变形——二维 O(n*logn) TOJ4701
    OCJP(1Z0-851) 模拟题分析(六)over
    OCJP(1Z0-851) 模拟题分析(八)over
    OCJP(1Z0-851) 模拟题分析(九)over
  • 原文地址:https://www.cnblogs.com/wphl-27/p/13840120.html
Copyright © 2020-2023  润新知