`
xyue13
  • 浏览: 13883 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

数据库中char, varchar, nvarchar的差异

阅读更多
1. char
     固定长度,最长n个字符。


2. varchar
     最大长度为n的可变字符串。
(n为某一整数,不同数据库,最大长度n不同)


char和varchar区别:
     varchar必char节省空间,但在效率上比char稍微差一些。
     说varchar比char节省空间,是因为varchar是可变字符串,比如:用varchar(5)存储字符串“abc”,只占用3个字节的存储空间,而用char(5)存储,则占用5个字节(“abc  ”)。
     说varchar比char效率稍差,是因为,当修改varchar数据时,可能因为数据长度不同,导致数据迁移(即:多余I/O)。其中,oracle对此多余I/O描述的表达是:“行迁移”(Row Migration)。


“行迁移”(Row Migration):
      “当一行的记录初始插入时是可以存储在一个block中的,由于更新操作导致行增加了,而block的自由空间已经完全满了,这个时候就产生了行迁移。在这种情况下,oracle将会把整行数据迁移到一个新的block中,oracle会保留被迁移的行的原始指针指向新的存放行数据的block,这就意味着被迁移行的ROW ID是不会改变的。"
     其中要解释一下:block是oracle中最小的数据组织与管理单位,是数据文件磁盘储存空间单位,也是数据库I/O最小单位(也就是说,读和写都是一个block打大小,所以如果block没满时,更新内容长度变更的varchar字段,和更新内容长度没变的varchar字段,I/O次数是一样,不存在额外消耗,只有在block满时,才会出现额外I/O,所以char和varchar性能之间的性能差异,是相当细微的,绝大多数情况下可以忽略不计,所以上文描述的“稍”差的含义)。
     所以,我的开发经验是:“用varchar完全代替char吧,没什么好顾虑的”。


3. nvarchar
     nvarchar的特性,需要和varchar对比。
     nvarchar和varchar的不同主要是在对于数据的存储方式上:
     1). varchar:按字节存储数据
          varchar(6),最多能存储6个字节的数据,比如:“哈哈哈”,“abcdef”......
备注:一个中文字符在数据库里占多少个字节,要看unicode的编码方式,比如:utf8在mysql上占3个字节,sqlserver的Chinese_PRC_CI_AS占2个字节...
     2). nvarchar:按字符存储数据
          nvarchar(6),最多能存储6个字符/中文数据,比如:"哈哈哈哈哈哈",“abcdef”......
          nvarchar(m)最大存储的实际字节长度=n*m(n跟据编码方式而定),如果nvarchar存储的是英文字符,也是根据编码方式存储n的字节长度。也就是说,如果用nvarchar存储英文字符,会浪费一半以上的存储空间....
         
总结:
     1. char和varchar的性能差距是很小的,可以考虑忽略不计。
     2. 在大数据量应用中,使用char和nvarchar有可能导致大量的存储空间的浪费。
分享到:
评论

相关推荐

    SQL2005中char nchar varchar nvarchar数据类型的区别和使用环境讲解

    本文将详细介绍char、nchar、varchar和nvarchar这四种数据类型的区别以及它们的适用环境。 1. **char**: - char是一种固定长度的非Unicode字符数据类型,长度范围为1到8,000个字节。 - 不论存储的数据实际长度...

    SQL Server数据类型char、nchar、varchar、nvarchar的区别浅析

    本文主要探讨了四个常见的字符数据类型:char、nchar、varchar和nvarchar,它们各自具有独特的特性和用途。 1. **char数据类型** - `char`是一种固定长度的非Unicode字符数据类型,适用于存储长度恒定的文本信息。...

    oracle char,varchar,varchar2的区别和使用方法

    ### Oracle CHAR, VARCHAR, VARCHAR2 的区别与使用方法 在 Oracle 数据库中,字符串类型是极为常见的数据类型之一,主要用于存储文本数据。其中最常用的三种类型包括:`CHAR`, `VARCHAR`, 和 `VARCHAR2`。这三种...

    SQL Server中,varchar和nvarchar如何选择?

    在SQL Server中,选择使用`varchar`还是`nvarchar`数据类型是数据库设计中的一个重要决策,因为这直接影响到数据存储的效率、空间占用以及兼容性。理解这两种数据类型的差异至关重要。 `varchar`是一种变长字符串...

    oracle 中几种字符类型

    在 Oracle 中,字符类型是最基本的数据类型之一,有多种不同的字符类型,包括 CHAR、VARCHAR、VARCHAR2、NVARCHAR、NVARCHAR2 等。了解这些字符类型的特点和区别对于数据库设计和应用开发非常重要。 一、CHAR 类型 ...

    Oralce中VARCHAR2()与NVARCHAR2()的区别介绍

    在Oracle数据库中,VARCHAR2()和NVARCHAR2()都是用于存储可变长度的字符串数据类型,但它们之间存在显著的差异,主要涉及到字符编码和存储方式。 首先,VARCHAR2()类型是Oracle数据库中最常见的字符串类型,它允许...

    深入char、varchar、text和nchar、nvarchar、ntext的区别详解

    - `NCHAR`和`NVARCHAR`的长度限制通常在1到4000个字符之间,与`CHAR`和`VARCHAR`相比,不受英文和汉字字符差异的影响。 - 由于Unicode支持,它们在处理多语言数据时更为方便,但空间效率相对较低。 5. **NTEXT**...

    Sqlserver中char,nchar,varchar与Nvarchar的区别分析

    在SQL Server中,字符数据类型是用来存储文本信息的,包括`char`、`nchar`、`varchar`和`nvarchar`。这些数据类型各有特点,适用于不同的存储需求。 1. `char`类型: - `char`是固定长度的字符数据类型,这意味着...

    mysql数据库转换成SQLserver数据库

    同时,要注意不同数据库的数据类型可能存在差异,如MySQL的VARCHAR与SQL Server的NVARCHAR。 2. **结构映射**:由于MySQL和SQL Server的语法和特性有所不同,转换过程中需要对表结构进行映射。例如,MySQL的ENUM...

    数据库的区别

    例如,某些数据库可能会对`CHAR`类型的列进行更有效的索引,而其他数据库可能更擅长处理`VARCHAR`。数据库管理员需要根据具体的应用场景和性能需求来选择合适的数据类型和配置参数。 总的来说,理解不同数据库之间...

    主流数据库数据类型的比较

    - MS SQL Server的字符类型有char、varchar、text、nchar、nvarchar和ntext,其中n开头的类型用于存储Unicode字符。 - Oracle的字符类型有char、varchar2、clob,其中varchar2类似于varchar,clob用于存储大文本。...

    各种数据库的数据类型对比

    MySQL提供了广泛的数据类型,如数值类型(整数、浮点数、定点数)、字符串类型(CHAR、VARCHAR、TEXT)、日期和时间类型(DATE、TIME、DATETIME、TIMESTAMP)以及二进制类型(BLOB、BINARY)。例如,VARCHAR用于...

    MySql Oracle SqlServer三大数据库的数据类型列表.pdf

    4. 字符串:CHAR、VARCHAR、NVARCHAR、TEXT 和 NTEXT,其中 NVARCHAR 和 NTEXT 用于存储Unicode数据。 5. 日期和时间:DATE、TIME、DATETIME2、DATETIMEOFFSET,以及旧的 DATETIME 和 SMALLDATETIME 类型。 6. 二...

    深入SQL Server中定长char(n)与变长varchar(n)的区别详解

    在SQL Server数据库中,了解和正确使用定长(char)和变长(varchar)数据类型是至关重要的,因为它们直接影响到存储效率、查询性能以及数据库的总体设计。下面将详细阐述这两种数据类型的特性和区别。 首先,`char(n)`...

    Oracle逻辑备用数据库配置.doc

    - 逻辑备用数据库支持的数据类型包括:`CHAR`, `NCHAR`, `VARCHAR2`, `VARCHAR`, `NVARCHAR2`, `NUMBER`, `DATE`, `TIMESTAMP`, `TIMESTAMP WITH TIME ZONE`, `TIMESTAMP WITH LOCAL TIME ZONE`, `INTERVAL YEAR TO...

    INFORMIX数据库和其他数据库的比较[参照].pdf

    例如,INFORMIX的CHAR类型与SQL Server的建议使用方式类似,都是固定长度的存储,但SQL Server提供了VARCHAR、TEXT、NTEXT和IMAGE等更多选择。在Unicode字符数据上,INFORMIX没有直接对应SQL Server的NCHAR和...

Global site tag (gtag.js) - Google Analytics