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仍 ...
随机推荐
- Selenium IDE 基础使用教程
Selenium IDE 基础使用教程 简介及安装 Selenium IDE 是一个易于使用的Firefox插件.它提供了一个图形用户界面,可进行脚本录制及导出.其记录的脚本可以被转换成多种编程语言( ...
- iOS:quartz2D绘图(绘制渐变图形)
quartzD可以用来绘制渐变图形,即图形向外或向内发散,会变得越来越模糊. 渐变分为线性渐变和径向渐变,所谓线性渐变,就是图形以线的方式发散,发散后一般呈现出矩形的样子:而径向渐变,就是以半径的大小 ...
- AHB总线RAM Verilog实例
//*************************************************************************** // Copyright(c)2017, L ...
- tensorflow c++ API加载.pb模型文件并预测图片
tensorflow python创建模型,训练模型,得到.pb模型文件后,用c++ api进行预测 #include <iostream> #include <map> # ...
- HDU 4372 - Count the Buildings(组合计数)
首先想过n^3的组合方法,即f(i,j,k)=f(i-1,j,k)*(i-2)+f(i-1,j-1,k)+f(i-1,j,k-1),肯定搞不定 然后想了好久没有效果,就去逛大神博客了,结果发现需要用到 ...
- MongoDB分片集群节点状态stateStr:RECOVERING解决
1.关闭一直处于RECOVERING状态的mongodb server /opt/mongodb/mongodb-linux-x86_64-2.4.8/bin/mongo 127.0.0.1:220 ...
- java运行shell命令,chmod 777 xxx,改变权限无效的解决的方法。
在java程序中运行shell命令,改变文件的权限.能够在命令行中运行 chmod 777 <span style="font-family: Arial, Helvetica, sa ...
- Some Web API Url Samples
URI Verb Description ...
- 树莓派学习笔记——GPIO功能学习
0.前言 树莓派现在越来越火,网上树莓派的资料也越来越多.树莓派的学习可以分为linux系统学习和linux驱动学习,利用树莓派制作LED流水灯应该算是驱动学习吧.树莓派来自国外,国外嵌入式开 ...
- winfrom 底层类 验证码
效果图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMzgxNjcwOQ==/font/5a6L5L2T/fontsize/400/fill/I ...