char和varchar的用法(Oracle中的Char与Varchar的区别和实例)

:暂无数据 2026-08-09 10:20:09 :0

char和varchar的用法(Oracle中的Char与Varchar的区别和实例)

其实char和varchar的用法的问题并不复杂,但是又很多的朋友都不太了解Oracle中的Char与Varchar的区别和实例,因此呢,今天小编就来为大家分享char和varchar的用法的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!

本文目录

Oracle中的Char与Varchar的区别和实例

   CHAR的长度是固定的 而VARCHAR 的长度是可以变化的 比如 存储字符串“abc" 对于CHAR ( ) 表示你存储的字符将占 个字节(包括 个空字符) 在数据库中它是以空格占位的 而同样的VARCHAR ( )则只占用 个字节的长度 只是最大值 当你存储的字符小于 时 按实际长度存储

   CHAR的效率比VARCHAR 的效率稍高 看来cscm_number应该设成 char( )

   目前VARCHAR是VARCHAR 的同义词 工业标准的VARCHAR类型可以存储空字符串 但是Oracle不这样做 尽管它保留以后这样做的权利 Oracle自己开发了一个数据类型VARCHAR 这个类型不是一个标准的VARCHAR 它将在数据库中varchar列可以存储空字符串的特性改为存储NULL值 假如你想有向后兼容的能力 Oracle建议使用VARCHAR 而不是VARCHAR

  何时该用CHAR 何时该用varchar ?

  CHAR与VARCHAR 是一对矛盾的统一体 两者是互补的关系 VARCHAR 比CHAR节省空间 在效率上比CHAR会稍微差一些 即要想获得效率 就必须牺牲一定的空间 这也就是我们在数据库设计上常说的‘以空间换效率’ VARCHAR 虽然比CHAR节省空间 但是假如一个VARCHAR 列经常被修改 而且每次被修改的数据的长度不同 这会引起‘行迁移’(Row Migration)现象 而这造成多余的I/O 是数据库设计和调整中要尽力避免的 在这种情况下用CHAR代替VARCHAR 会更好一些

  关于char和varchar 的比较

  char类型与char型或字符常量的比较 在比较时使用补齐空格的方式进行比较

  varchar 类型与varchar 类型 char型和字符常量的比较 在比较时不补充空格 直接比较

  create table tt(A CHAR( ) A VARCHAR ( )) ;

  INSERT INTO TT VALUES( A A ) ;

  insert into tt values( A A ) ;

  MIT ;

   CHAR型与字符常量的比较 字符常量作为char型处理

   与 A 比较 返回 行 也就是在比较时自动将常量 A 右补齐空格后比较

  select * from tt where a = A ;

  A A

  A A

  A A

   与 A 比较 返回 行 也就是在比较时自动将常量 A 右补齐空格后比较

  select * from tt where a = A ;

  A A

  A A

  A A

   VARCHAR 与常量的比较 字符常量作为varchar 型处理

   与 A 比较 返回 行 也就是在比较时对 A 不做处理 直接比较

  select * from TT WHERE A = A ;

  A A

  A A

   与 A 比较 返回 行 也就是在比较时对 A 不做处理 直接比较

  select * from TT WHERE A = A ;

  A A

  A A

   当CHAR类型和VARCHAR 类型比较时 比较时对字段值是不作处理 直接比较的

   让A 和A 直接比较 此时是直接比较 有一条记录的A 和A 相同

  select * from tt where a =a ;

  A A

  A A

  但是当和decode函数配合使用时 出现不同的情况

  使用A 字段

  select decode(a A AAAA BBBB ) FROM TT ;

  DECODE(A A AAAA BBBB )

  BBBB

  BBBB

  虽然A 字段为char( ) 但是比较时并没有将常量 A 补空格再与字段A 做比较 而是直接进行比较 也就是将两个比较字段按照varchar 类型处理的

  因此比较时认为字段A 不等于常量 A 出现两条结果为 BBB 的记录

  进一步验证

  select decode(a A AAAA BBBB ) FROM TT ; 此处是两个空格

  DECODE(A A AAAA BBBB )

  BBBB

  BBBB

  还是返回两条 BBB 的记录 说明比较的不是按照char型的比较规则处理的

  使用A 字段

  select decode(a A AAAA BBBB ) FROM TT ;

  DECODE(A A AAAA BBBB )

  AAAA

  BBBB

  此时是正常的VARCHAR 类型之间的比较 第一条记录的A 字段等于 A 返回 AAA 第二行记录的A 字段为’A 比较时不等 返回 BBB

  当使用case表达式处理A 字段时 出现了与decode函数不同的处理结果

  使用字段A

  select case a when A then AAA else BBB end from tt ;

  CASEA WHEN A THEN AAA ELSE BBB

  AAA

  AAA

  在使用case语句中使用A 字段与常量 A 比较时 两个比较值按照char型的比较规则处理 在右补空格之后进行比较 因此返回两条记录

  进一步验证 如下

  select case a when A then AAA else BBB end from tt ;

  CASEA WHEN A THEN AAA ELSE BBB

  AAA

  AAA

  此时将常量改为 A 比较时仍视为char类型之间的比较 将字段A 补齐空格后与常量比较

  使用A 字段

  select case a when A then AAA else BBB end from tt ;

  CASEA WHEN A THEN AAA ELSE BBB

  AAA

  BBB

  此时是正常的VARCHAR 类型之间的比较 第一条记录的A 字段等于 A 返回 AAA 第二行记录的A 字段为’A 比较时不等 返回 BBB

  总结

  在使用decode函数对char字段做比较时 需要注意即使比较的两个字段都是char类型 但是decode函数是将其转化varchar 类型 进行处理 不遵循char型的比较规则

  对于char数据 在集合操作中 按照char的实际数据进行比较 而不是按照char型数据的比较规则进行的

  下面是一个简单例子

  create table t (name char( )) ;

  create table t (name char( )) ;

  begin

  for i in loop

  insert into t values(to_char(i)) ;

  insert into t values(to_char(i)) ;

  end loop ;

  mit;

  end ;

  select name from t minus select name from t ;

  NAME

  如果按照char型的比较规则 则不应该有返回值

  select anem from t intersect select name from t ;

  NAME

  无返回值 也说明集合操作时比较没有按照char型的比较规则

  ===============================评论 ============================

  对于decode和case对于char类型的差别 原因是由于case是表达式 而decode是函数

  函数中输入参数和返回值一般都定义为varchar 类型

  多谢指点 一时没有想到这里 看了一下decode函数的定义 如你所述 在使用decode的函数对char型数据进行类型转换

  下面是decode的函数的参数定义

  SQL》 desc sys standard decode

  Parameter Type Mode Default?

  (RESULT) NUMBER

  EXPR NUMBER IN

  PAT NUMBER IN

  RES NUMBER IN

  (RESULT) VARCHAR

  EXPR NUMBER IN

  PAT NUMBER IN

  RES VARCHAR IN

  (RESULT) DATE

  EXPR NUMBER IN

  PAT NUMBER IN

  RES DATE IN

  (RESULT) NUMBER

  EXPR VARCHAR IN

  PAT VARCHAR IN

  RES NUMBER IN

  (RESULT) VARCHAR

  EXPR VARCHAR IN

  PAT VARCHAR IN

  RES VARCHAR IN

  (RESULT) DATE

  EXPR VARCHAR IN

  PAT VARCHAR IN

  RES DATE IN

  (RESULT) NUMBER

  EXPR DATE IN

  PAT DATE IN

  RES NUMBER IN

  (RESULT) VARCHAR

  EXPR DATE IN

  PAT DATE IN

  RES VARCHAR IN

  (RESULT) DATE

  EXPR DATE IN

  PAT DATE IN

  RES DATE IN

  (RESULT) SYS STANDARD

  EXPR SYS STANDARD IN

  PAT SYS STANDARD IN

  RES SYS STANDARD IN

  (RESULT) SYS STANDARD

  EXPR SYS STANDARD IN

  PAT SYS STANDARD IN

lishixinzhi/Article/program/Oracle/201311/19034

char和varchar区别

1、字符类型长度不同

char类型的长度是固定的,varchar的长度是可变的。

比如:使用char(10),表示存储的字符将占10个字节(包括7个空字符);使用varchar2(10),则表示只占3个字节,10是最大值,当存储的字符小于10时,按照实际的长度存储。

2、效率不同

char类型的效率比varchar的效率稍高。

3、空间占用不同

varchar2比char节省空间,但是在效率上比char稍差些。既要获得效率即必须牺牲一点空间,这就是设计上的"以空间换时间"。

扩展资料:

char类型占1字节,就是8位,所能存储的正整数是 0111 1111,即127。如果将 int 型的整数i= 128
赋予ch,会产生溢出。

因128是 int 型,占 4 字节,二进制代码为 0000 0000 0000 0000 0000 0000 1000
0000.。若将它赋给一个只有8位的char 类型变量,只能将低8位的1000 0000
放进去,其他的都会被删掉。

整数在计算机中都是以补码的形式存储的,此时1000 0000 在计算机的眼里,是一个补码,最左边是 1
表示负数,补码1000 0000 所对应的十进制是 -128,所以最后输出的就是 -128。因此溢出会使得最大正整数变成最小负整数。

                       百度百科-varchar

char和varchar的区别

一、用途不同

1、char:char用于C或C++中定义字符型变量。

2、varchar:VARCHAR(M)是一种比CHAR更加灵活的数据类型,同样用于表示字符数据。

二、特点不同

1、char:char在标准中不指定为signed或unsigned,编译器可以编译为带符号的,也可以编译为不带符号的。

2、varchar:VARCHAR可以保存可变长度的字符串。其中M代表该数据类型所允许保存的字符串的最大长度,只要长度小于该最大值的字符串都可以被保存在该数据类型中。

三、支持不同

1、char:只占一个字节,取值范围为 -128 ~ +127(-2^7~2^7-1)。

2、varchar:支持的最大长度是255个字符。

百度百科-varchar

百度百科-char

char(10)和VARCHAR(10)主要的区别是什么

  1. 首先明确的是,char的长度是不可变的,而varchar的长度是可变的,

  2. 定义一个char,如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,

  3. char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

  4. char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

扩展资料:char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。

varchar和char的区别

char和varchar的区别如下:

1、最大长度:char最大长度是255字符,varchar最大长度是65535个字节。

2、定长:char是定长的,不足的部分用隐藏空格填充,varchar是不定长的。

3、空间使用:char会浪费空间,varchar会更加节省空间。

4、查找效率:char查找效率会很高,varchar查找效率会更低。

5、尾部空格:char插入时可省略,vaechar插入时不会省略,查找时省略。

char和varchar的区别

char和varchar是mysql中的两个相似的列,都可以存储字符和字符串。但是char存储的列的长度是不可变的,varchar存储的列的长度是可变的。

例如:插入char(5)的列表示这个列占用的存储空间一直是5个字符大小。但是在存储数据是往往不会满足5个字符,可能会比5少,也可能会多。比如我们

插入“abc”时,很显然“abc”是3个字符,此时MySql底层会将“abc”后面追加两个空格字符为“abc  ”。检索时,MySql会自动帮你做一次trim()操作,去掉最后的空格,然后返回“abc”。

varchar,char,text的区别

1. 区别一:定长和变长

char表示定长,长度固定;varchar是变长,即长度可变。

char如果插入的长度小于定义的长度时,则用空格填充;

varchar小于定义长度时,还是按实际长度存储,插入多长就存多长,但要在总长度上加1字符,这个用来存储位置。如果数据存在空格,当值保存和检索时,空格会保留。

建议!

1. myisam 存储引擎 建议使用固定长度,数据列代替可变长度的数据列。

2. memory存储引擎 目前都使用固定数据行存储,因此无论使用char varchar列都没关系,

3. innodb 存储引擎 建意使用varchar 类型

因为长度固定,char的存取速度还是要比varchar要快得多,方便程序的存储和查找;但是char也为此付出的是空间的代价,因为其长度固定,所以会占据多余的空间,可谓是以空间换取时间效率。varchar刚好相反,以时间换空间

2. 区别二:存储的容量不同

对char来说,最多能存放的字符个数255,和编码无关

而varchar,最多能存放65532个字符。varchar的最大有效长度由最大行大小和使用字符集确定。整体最大长度是65532

在MySQL中,char, varchar, text类型的字段都可以用来存储字符类型的数据,char和varchar都可以指定最大的字符长度,但text不可以

数据的检索效率是:char 》 varchar 》 text

具体说明:

char: 存储定长数据很方便,char字段上的索引效率更高,必须在括号里定义长度,可以有默认值,比如定义char(10), 那么不论存储的数据是否达到10个字节,都要占去10个字节的空间(自动用空格填充),char在存储的时候会将右侧空格进行剔除,保留左侧空格。

varchar: 存储变长数据,但存储效率没有char高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。

varchar和char在查询的时候都只会根据where条件中的左侧空格进行判断,右侧末尾的空格会忽略

text: 存储可变长度的非unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储和检索过程中,不存在大小写转换,后面如果指定长度,不会报错,但这个长度是不起作用的,在插入数据时,超过你指定长度还是可以正常插入的。

关于存储空间:

在使用UTF8字符集的时候,MySQL手册上是这样描述的:

1. 基本拉丁字母、数字和标点符号使用一个字节;

2. 大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;

3. 韩语、中文和日本象形文字使用三个字节序列。

结论:

1、经常变化的字段用varchar;

2、知道固定长度的用char;

3、超过255字节的只能用varchar或者text;

4、能用varchar的地方不用text;

5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

6、同一张表出现多个大字段,能合并时尽量合并,不能合并时考虑分表

//资料来源于网络 脚本之家

sql,,varchar(50)和char(50)有什么区别分别可以容纳多少个汉字和英文字母

首先,可以容纳的汉字数和英文字母数是一致的。
区别在于,varchar是可变的,char是不可变的。
比如你要存’123456789’,我们知道要9个字符的长度。那么对于varchar来说,在数据表中就是占用了9个字符的长度,保存到硬盘,也是这个长度。但是对于char来说,就不是了,它依然使用了50个字符,保存到硬盘也是。
所以,在字段长度经常变化,并且最大长度仅在少数情况下出现时,应当使用varchar。仅在长度一定是一致的,或大部分情况下是最大长度,偶尔是其他长度时,才使用char。

varchar和char有什么区别,举例说明

char 和 varchar
固定长度 (char) 或可变长度 (varchar) 字符数据类型。

char

长度为 n 个字节的固定长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为 n 个字节。char 在 SQL-92 中的同义词为 character。

varchar

长度为 n 个字节的可变长度且非 Unicode 的字符数据。n 必须是一个介于 1 和 8,000 之间的数值。存储大小为输入数据的字节的实际长度,而不是 n 个字节。所输入的数据字符长度可以为零。varchar 在 SQL-92 中的同义词为 char varying 或 character varying。

注释
如果没有在数据定义或变量声明语句中指定 n,则默认长度为 1。如果没有使用 CAST 函数指定 n,则默认长度为 30。

将为使用 char 或 varchar 的对象被指派数据库的默认排序规则,除非用 COLLATE 子句另外指派了特定的排序规则。该排序规则控制用于存储字符数据的代码页。

支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题。如果使用 char 或 varchar:

如果希望列中的数据值大小接近一致,请使用 char。
如果希望列中的数据值大小显著不同,请使用 varchar。
如果执行 CREATE TABLE 或 ALTER TABLE 时 SET ANSI_PADDING 为 OFF,则一个定义为 NULL 的 char 列将被作为 varchar 处理。

当排序规则代码页使用双字节字符时,存储大小仍然为 n 个字节。根据字符串的不同,n 个字节的存储大小可能小于 n 个字符。

以上就是我们为大家找到的有关“char和varchar的用法(Oracle中的Char与Varchar的区别和实例)”的所有内容了,希望可以帮助到你。如果对我们网站的其他内容感兴趣请持续关注本站。

char和varchar的用法(Oracle中的Char与Varchar的区别和实例)

本文编辑:admin

更多文章:


form表单制作(为什么制作的form表单会在网页显示中多出一行)

form表单制作(为什么制作的form表单会在网页显示中多出一行)

大家好,如果您还对form表单制作不太了解,没有关系,今天就由本站为大家分享form表单制作的知识,包括为什么制作的form表单会在网页显示中多出一行的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 09:10

teammate(teammate,company,partner)

teammate(teammate,company,partner)

各位老铁们,大家好,今天由我来为大家分享teammate,以及teammate,company,partner的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧

2026年10月11日 06:10

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)

其实javascript arraybuffer的问题并不复杂,但是又很多的朋友都不太了解javascript可以把base64编码转换成二进制代码吗求示例代码!,因此呢,今天小编就来为大家分享javascript arraybuffer的

2026年10月11日 04:00

text函数公式(excel中round和text函数的区别是什么)

text函数公式(excel中round和text函数的区别是什么)

“text函数公式”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看text函数公式(excel中round和text函数的区别是什么)!

2026年10月11日 03:50

pascal编程软件(介绍一下pascal语言!)

pascal编程软件(介绍一下pascal语言!)

大家好,如果您还对pascal编程软件不太了解,没有关系,今天就由本站为大家分享pascal编程软件的知识,包括介绍一下pascal语言!的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!

2026年10月11日 02:40

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)

本篇文章给大家谈谈google chrome打不开,以及chrome浏览器打不开怎么回事 浏览器打不开的处理方法对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了

2026年10月11日 02:00

websocket整合springboot(Springboot整合Websocket遇到的坑)

websocket整合springboot(Springboot整合Websocket遇到的坑)

大家好,websocket整合springboot相信很多的网友都不是很明白,包括Springboot整合Websocket遇到的坑也是一样,不过没有关系,接下来就来为大家分享关于websocket整合springboot和Springbo

2026年10月11日 01:40

小米官方首爆miui14(miui14耗电严重官方回应)

小米官方首爆miui14(miui14耗电严重官方回应)

各位老铁们好,相信很多人对小米官方首爆miui14都不是特别的了解,因此呢,今天就来为大家分享下关于小米官方首爆miui14以及miui14耗电严重官方回应的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

2026年10月11日 00:40

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)

本篇文章给大家谈谈drawerlayout,以及android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年10月10日 19:20

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)

大家好,今天小编来为大家解答以下的问题,关于xor四位数怎么运算,单片机怎样用C语言实现4个数字间的异或这个很多人还不知道,现在让我们一起来看看吧!

2026年10月10日 17:50

最近更新

thinkpade470c加内存条(thinkpad e470c内存条是什么牌子如果要添加4g内存什么牌子比较好)
2026-10-11 09:00:03 浏览:0
frontpage的主要功能(frontpage是什么)
2026-10-11 08:40:18 浏览:0
热门文章

打印机m7400(m7400打印机清零方法)
2026-08-29 07:50:01 浏览:5
acrobat各版本区别(Acrobat XI Pro与 Acrobat PRO DC什么区别)
2026-08-29 22:30:20 浏览:2
联想y510p怎么升级(联想y510p换cpu)
2026-08-17 03:30:04 浏览:2
标签列表