ORACLE中关于 char 和 varchar2 的比较
先建表做一个测试:
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 的比较的更多相关文章
- 数据库中,char 与 varchar2 的区别
区别1: char 是定长的字符串 varchar2 是变长的字符串 区别2: name char(10) zhangsan__ 如果实际长度不足10,使用空格补齐 name varchar2 ...
- oracle中varchar、varchar2、char和nvarchar的区别
1.char char的长度是固定的,比如说,你定义了char(20),即使你你插入abc,不足二十个字节,数据库也会在abc后面自动加上17个空格,以补足二十个字节: char是区分中英文的,中文在 ...
- oracle中 char,varchar,varchar2的区别
区别: 1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串“abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符) ...
- oracle中char],varchar,varchar2
VARCHAR.VARCHAR2.CHAR的区别 1.CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储 ...
- Oracle中varchar,varchar2,nvarchar,nvarchar2的区别及其它数据类型描述
--varchar,varchar2 联系: 1.varchar/varchar2用于存储可变长度的字符串 比如varchar(20),存入字符串'abc',则数据库中该字段只占3个字节,而不是20个 ...
- Oracle中varchar2类型字段长度限制使用问题
为纪念中华人民共和国建军90周年,特此一篇,以此纪念,我军威武!!! 一.问题背景 项目中商品发布,却没有保存成功. 二.问题定位 初步判断向数据库中保存时出现了错误,查看日志文件,由于日志文件过大就 ...
- Oracle之Char VarChar VarChar2
Oracle之Char VarChar VarChar2 在Oracle数据库中,字符类型有Char.VarChar和VarChar2三种类型,但不大清楚各自区别在哪儿,平时基本上就是用VarChar ...
- ORACLE中的varchar2()与nvarchar2()的讲解
Oracle中NVARCHAR2和VARCHAR2的区别 [转]NVARCHAR2和VARCHAR2的区别,从使用角度来看区别在于:NVARCHAR2在计算长度时和字符集相关的,例如数据库是中文字符集 ...
- (转)在oracle中varchar和varchar2有什么区别?
1.varchar2把所有字符都占两字节处理(一般情况下),varchar只对汉字和全角等字符占两字节,数字,英文字符等都是一个字节: 2.VARCHAR2把空串等同于null处理,而varchar仍 ...
随机推荐
- IOS开发错误
After modifying system headers, please delete the module cache at '/Users/XXX/Library/Developer/Xcod ...
- python学习:两个py文件间的函数调用
本例子是测试一些数据分析模型的R值,R值越接近1,表明该模型越适合分析该数据集. 本例子是在集成开发环境Aptana Studio 3 中创建 一个dataAnaly ,然后创建modelTest.p ...
- SQL盲注攻击的简单介绍
1 简介 1.1 普通SQL注入技术概述 目前没有对SQL注入技术的标准定义,微软中国技术中心从2个方面进行了描述[1]: (1) 脚本注入式的攻击 (2) 恶意用户输 ...
- DXR
https://github.com/ConfettiFX/The-Forge/blob/master/CommonRaytracing_3/ThirdParty/DXR/doc/D3D12%20Ra ...
- ExpandListView onChildClickListener 失效
http://stackoverflow.com/questions/11529472/expandablelistview-onchildclicklistener-not-work 首先声明: ...
- CentOS6.6服务器系统配置(LAMP+phpMyAdmin)全流程
CentOS6.6服务器系统配置(LAMP+phpMyAdmin)全流程 昨天在腾讯云上买了个服务器,是CentOS6.6操作系统的裸机,里面什么都没,然后开始了一天一夜的LAMP(Apache+My ...
- vim 命令的使用
稍微再研究一下vim的命令使用. ----------------------------------------------------------------------------------- ...
- NHibernate中几个集合的选择
NHibernate是从Hibernate移植过来的基于NET平台的一个ORM框架,同时跟这框架一起的还有一个开源库,叫做Iesi.Collections,这个库扩展了NET平台下面的几个集合,所谓集 ...
- json字符串跟objective-c模型的相互转换
在当今这样一个各种openapi开放的年代,在熟悉的语言下面找到一款得心应手的将json字符串转换成模型的库可以说是十分必要的,在NET平台下,我们有Newtonsoft.Json这个库使用,那么在i ...
- mysql结构相同的三张表查询一条记录\将一张表中的数据插入另外一张表
将一张表中的数据插入另外一张表 1.两张表结构相同 insert into 表1名称 select * from 表2名称 2.两张结构不相同的表 insert into 表1名称(列名1,列名2,列 ...