先建表做一个测试:

CREATE TABLE TT(CHAR2 CHAR(2) , VARC2 VARCHAR2(2)), CHAR2 CHAR(3) ;
INSERT INTO TT VALUES('A','A','A') ;
INSERT INTO TT VALUES('A','A ','A') ;
COMMIT ;

1、CHAR 类型 与 CHAR型 比较,补齐空格。也就是说,CHAR 与 CHAR 类型比较时,不管各自定义的长度是多少,都能等。

SELECT * FROM TT WHERE TT.CHAR2 = TT.CHAR3

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

2、CHAR与字符常量的比较,补齐空格。也就是说,常量后边不用加空格也能匹配CHAR类型,不管CHAR定义的长度是多少。

SELECT * FROM TT WHERE TT.CHAR2 = 'A' ;

SELECT * FROM TT WHERE TT.CHAR3 = 'A' ;
CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A  

3、VARCHAR2 与常量比较,不处理空格,也就是说,如果你的数据中有空格,是找不出来的。如下,只能找到  'A'  的,而找不到  'A '  的。(第二个A后面有一个空格)

SELECT * FROM TT WHERE TT.VARC2 = 'A' ;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A

4、当CHAR类型和VARCHAR2类型比较时,比较时对字段值不作处理,直接比较。 也就是说,如果字符长度不一样,VARCHAR2 需要补齐空格,或者 CHAR 需要去掉空格才能相等。

SELECT * FROM TT WHERE TT.CHAR2 = TT.VARC2;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A ---只找出了相同的列,(有空格的‘A ’查不出来)

5、怎么处理不同表中,根据不同场景所定义的  VARCHAR2 与 CHAR 的匹配呢?

两种方法:

5.1  用RPAD 对 VARCHAR2 补齐长度,以上表为例

SELECT * FROM TT WHERE RPAD(TT.VARC2 ,2 ,' ' )  = TT.CHAR2;

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

5.2 用TRIM 函数对 VARCHAR2 和 CHAR 去空格。

SELECT * FROM TT WHERE TRIM(TT.VARC2)  =  TRIM(TT.CHAR2);

CHAR2 VARC2 CHAR3
----- ----- -----
A A A
A A A

大家可以根据自己的需求,选择其中一种进行转换。

小TIPS:如果该列建立了索引,则建议使用 VARCHAR2 补齐空格的方法与 CHAR 进行匹配,而不建议使用带函数的索引。

如果不涉及索引,两种方法都可以。

  

ORACLE中关于 char 和 varchar2 的比较的更多相关文章

  1. 数据库中,char 与 varchar2 的区别

    区别1: char 是定长的字符串 varchar2 是变长的字符串 区别2: name char(10)   zhangsan__ 如果实际长度不足10,使用空格补齐   name varchar2 ...

  2. oracle中varchar、varchar2、char和nvarchar的区别

    1.char char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节: char是区分中英文的,中文在 ...

  3. oracle中 char,varchar,varchar2的区别

    区别:      1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符) ...

  4. oracle中char],varchar,varchar2

    VARCHAR.VARCHAR2.CHAR的区别 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储 ...

  5. Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述

    --varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...

  6. Oracle中varchar2类型字段长度限制使用问题

    为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...

  7. Oracle之Char VarChar VarChar2

    Oracle之Char VarChar VarChar2 在Oracle数据库中,字符类型有Char.VarChar和VarChar2三种类型,但不大清楚各自区别在哪儿,平时基本上就是用VarChar ...

  8. ORACLE中的varchar2()与nvarchar2()的讲解

    Oracle中NVARCHAR2和VARCHAR2的区别 [转]NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集 ...

  9. (转)在oracle中varchar和varchar2有什么区别?

    1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...

随机推荐

  1. [转]自用类库整理之SqlHelper和MySqlHelper

    本文转自:http://www.cnblogs.com/lzrabbit/p/3287155.html 自用的SQLHelper和MySqlHelper,除一些通用方法外,封装了一些很实用的批量操作方 ...

  2. iOS:转载:同步、异步、并行、串行的详解

    理解 iOS 开发中 GCD 相关的同步(synchronization)\ 异步(asynchronization),串行(serial)\ 并行(concurrency)概念 2014年11月21 ...

  3. 在Ubuntu Server上源码安装OpenERP 8.0,并配置wsgi和nginx运行环境

    原文: How to install OpenERP 8.0 Alpha on a fresh Debian / Ubuntu server. OpenERP的安装,可以有多种方式,通过添加源,到 h ...

  4. SQL 之 Group By

    SQL 之 Group By Group By从字面意义上理解就是根据By指定的规则对数据进行分组,所谓的分组就是将一个数据表划分成若干个小区域. 例如:有这么一张表

  5. http 使用curl发起https请求报错的解决办法

    使用curl发起https请求的时候报错:“SSL certificate problem, verify that the CA cert is OK. Details: error:1409008 ...

  6. 该登录名来自不受信任的域,不能与 Windows 身份验证一起使用。

    使用sql2008  远程连接数据库的时候遇到了这个问题,我用的是ADO.NET 实体数据模型,有app.config和web.config  解决了好久,因开始以为是sql的权限问题.后来解决了只需 ...

  7. [Functional Programming ADT] Create State ADT Based Reducers (applyTo, Maybe)

    The typical Redux Reducer is function that takes in the previous state and an action and uses a swit ...

  8. C#秘密武器之异步编程

    一.概述 1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序 ...

  9. 手机端UC浏览器,在java开发的下载功能中存在的问题?

    在java web开发中,不同浏览器对下载文件的格式有不同的要求,有时会出现视频,音频等文件无法下载的问题.我在开发中,也遇到类似的问题,觉得很苦恼. 经过百度和请教学习,得到2个解决方案. 首先得到 ...

  10. chromedriver中的浏览器选项

    There are lots of command lines which can be used with the Google Chrome browser. Some change behavi ...