关闭

Oracle字段类型char、varchar2、nvarchar2的区别与使用

标签: charvarcharvarchar2nvarcharnvarchar2
1289人阅读 评论(0) 收藏 举报
分类:

区别:

1、char
(1)char的长度是固定的。比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节;
(2)char是区分中英文的。中文在char中占两个字节,而英文占一个,所以char(20)你只能存20个字母或10个汉字。

char适用于长度比较固定的,一般不含中文的情况。


2、varchar/varchar2
(1)varchar是长度不固定的。比如说,你定义了varchar(20),当你插入abc,则在数据库中只占3个字节。
(2)varchar同样区分中英文。这点同char。

(3)varchar2基本上等同于varchar。它是oracle自己定义的一个非工业标准varchar,不同在于,varchar2用null代替varchar的空字符串。

varchar/varchar2适用于长度不固定的,一般不含中文的情况。


3、nvarchar/nvarchar2
(1)nvarchar和nvarchar2是长度不固定的;
(2)nvarchar不区分中英文。比如说:你定义了nvarchar(20),你可以存入20个英文字母/汉字或中英文组合,这个20定义的是字符数而不是字节数;
(3)nvarchar2基本上等同于nvarchar,不同在于nvarchar2中存的英文字母也占两个字节。

nvarchar/nvarchar2适用于存放中文。


4、varchar/varchar2 与 nvarchar/nvarchar2

      这四个类型都属于变长字符类型。

(1)varchar和varchar2的区别在与后者把所有字符都占两字节,前者只对汉字和全角等字符占两字节。

(2)nvarchar和nvarchar2的区别和上面一样。与上面不同的是,是根据Unicode标准所进行的定义的类型,通常用于支持多国语言类似系统的定义。


长度赋值

1、char [ ( n ) ]

    固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节。


2、varchar [ ( n | max ) ]
    可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节,用于反映存储的数据的长度。所输入数据的长度可以为 0 个字符。
    * 如果列数据项的大小一致,则使用 char。
    * 如果列数据项的大小差异相当大,则使用 varchar。
    * 如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。

(注:此处,原文未提及nvarchar、nvarchar2)
如果未在数据定义或变量声明语句中char 或 varchar 数据类型指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时char 或 varchar 数据类型未指定 n,则默认长度为 30。

当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。


3、nvarchar [ ( n | max ) ]
    可变长度 Unicode 字符数据。n 值在 1 到 4,000 之间(含)。max 指示最大存储大小为 2^31-1 字节。存储大小是所输入字符个数的两倍 + 2 个字节。所输入数据的长度可以为 0 个字符。



Oracle推荐使用varchar2、nvarchar2。实际varchar、nvarchar可能都找不到了。

和VARCHAR不同的是,VARCHAR2把空串等同于null处理,这也是为什么ORACLE推荐使用VARCHAR2类型的原因。


(注:原文是“char、varchar、varchar2、nvarchar、nvarchar2”五种的对比。文中均保留。)

/*————————————以上为个人整理——————————*/

原文链接:http://winie.iteye.com/blog/540340



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

ORACLE中VARCHAR2类型的字段长度

ORACLE中VARCHAR2类型的字段长度是按照byte来定义的。如果数据库使用的字符集是GBK,GB2312或者其他定长字符集的话,这个问题似乎可以被忽略,因为只要把数据库的字段长度/2就可以得到...
  • AngelMyMei
  • AngelMyMei
  • 2014-05-05 13:29
  • 2444

ORACLE VARCHAR2最大长度是4000?还是32767?

ORACLE VARCHAR2最大长度问题 url:http://www.cnblogs.com/kerrycode/p/3833746.html 2014-07-09 15:53 by 潇湘隐者, ...
  • jackpk
  • jackpk
  • 2015-11-05 15:16
  • 3774

在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配

在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配,解决方法有两种,见下面的示例 例: [s...
  • u011345304
  • u011345304
  • 2016-11-17 10:24
  • 170

ORACLE 中 VARCHAR2 类型的字段长度是按照 byte 来定义的 一个容易被忽略的问题

很多新手在建数据库或添加表、字段时,会这样忽略一个问题:ORACLE 中 VARCHAR2类型的字段长度是按照 byte 来定义的。如果数据库使用的字符集是 GBK,GB2312 或者其他定长字符集的...
  • qiuhan
  • qiuhan
  • 2015-01-06 11:15
  • 2151

oracle varchar2改成大字段类型clob,读取大字段内容

oracle varchar2改成大字段类型,如果varchar2内容
  • cai7095576
  • cai7095576
  • 2014-04-18 10:38
  • 3800

Oracle数据库中字段定义为Char类型,Hibernate用该字段进行动态绑定参数查询,获取不到结果的问题

一、问题背景产生环境:oracle数据库,hibernate操作定义了一个表 create table STORE_INFORMATION ( id CHAR(32) n...
  • honghailiang888
  • honghailiang888
  • 2017-06-27 10:02
  • 746

long类型字段转换成varchar2类型

参考文档: How to Convert a Long to Varchar2 (文档 ID 228532.1) /*long类型字段转换成varchar2类型*/ --建表 create table...
  • ghostliming
  • ghostliming
  • 2015-12-27 01:29
  • 4607

SQL那些事儿(十三)--Oracle中varchar与varchar2区别

varchar -- 存放定長的字符數據,最長2000個字符;varchar2 -- 存放可變長字符數據,最大長度為4000字符。 目前没有本质的区别但是:varchar2是oracle提供的独特的数...
  • xcymorningsun
  • xcymorningsun
  • 2016-11-15 15:26
  • 3841

关于oracle中的wmsys.wm_concat中的使用问题

转:http://blog.csdn.net/pengdingxu10/article/details/46438567 版权声明:本文为博主原创文章,未经博主允许不得转...
  • pzasdq
  • pzasdq
  • 2016-01-13 13:54
  • 828

Oracle的数据类型转换 to_char(date)

Oracle的数据类型转换 to_char(date) Oracle的数据类型转换 Oracle的数据类型转换分为显式数据类型转换和隐式类型转换 在通常情况下,隐式数据类型转换是可用的...
  • haiross
  • haiross
  • 2014-03-21 16:57
  • 1494
    个人资料
    • 访问:23220次
    • 积分:357
    • 等级:
    • 排名:千里之外
    • 原创:15篇
    • 转载:3篇
    • 译文:0篇
    • 评论:0条
    文章分类