在Oracle中CHAR,NCHAR,VARCHAR,VARCHAR2,NVARCHAR2这五种类型的区别

【在Oracle中CHAR,NCHAR,VARCHAR,VARCHAR2,NVARCHAR2这五种类型的区别 】

1.CHAR(size)和VARCHAR(size)的区别 

CHAR为定长的字段,最大长度为2K字节; 
VARCHAR为可变长的字段,最大长度为4K字节; 

2.CHAR(size)和NCHAR(size)的区别 

CHAR如果存放字母数字占1个字节,存放GBK编码的汉字存放2个字节,存放UTF-8编码的汉字占用3个字节; 
NCHAR根据所选字符集来定义存放字符的占用字节数,一般都为2个字节存放一个字符(不管字符或者汉字) 

3.VARCHAR(size)和VARCHAR2(size)的区别 

在现在的版本中,两者是没有区别的;最大长度为4K字节;推荐使用VARCHAR2; 

4.VARCHAR2(size)和NVARCHAR2(size)的区别 

最大长度为4K字节,区别同CHAR与NCHAR的区别;(如果数据库字符集长度是2,则NVARCHAR2最大为2K) 

5.共同特性 

当执行insert的时候,插入的值为'',则转变成null,即insert ... values('') <=> insert ... values(null) 
搜索的条件须用where xx is null 

6.例子 

比如有一个性别字段,里面存放“男,女”的其中一个值,两种常用选择 
CHAR(2)    和 NCHAR(1)  

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

varchar和varchar2,nvarchar和nvarchar2,四个类型都属于变长字符类型。
varchar和varchar2的区别在与后者把所有字符都占两字节,前者只对汉字和全角等字符占两字节。
nvarchar和nvarchar2的区别和上面一样,与上面区别在于是根据Unicode标准所进行的定义的类型,通常用于支持多国语言类似系统的定义。 

1.char 

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

char是区分中英文的,中文在char中占两个字节,而英文占一个,所以char(20)你只能存20个字母或10个汉字。 

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

2.varchar/varchar2 

varchar是长度不固定的,比如说,你定义了varchar(20),当你插入abc,则在数据库中只占3个字节。 

varchar同样区分中英文,这点同char。 

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

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

3.nvarchar/nvarchar2 

nvarchar和nvarchar2是长度不固定的 

nvarchar不区分中英文,比如说:你定义了nvarchar(20),你可以存入20个英文字母/汉字或中英文组合,这个20定义的是字符数而不是字节数 

nvarchar2基本上等同于nvarchar,不同在于nvarchar2中存的英文字母也占两个字节 

nvarchar/nvarchar2适用于存放中文 


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■【char [ ( n ) ] 】

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

■■■【varchar [ ( n | max ) ] 】

可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节,用于反映存储的数据的长度。所输入数据的长度可以为 0 个字符。 

* 如果列数据项的大小一致,则使用 char。 
* 如果列数据项的大小差异相当大,则使用 varchar。 
* 如果列数据项大小相差很大,而且大小可能超过 8,000 字节,请使用 varchar(max)。 

如果未在数据定义或变量声明语句中char 或 varchar 数据类型指定 n,则默认长度为 1。如果在使用 CAST 和 CONVERT 函数时char 或 varchar 数据类型未指定 n,则默认长度为 30。 
当执行 CREATE TABLE 或 ALTER TABLE 时,如果 SET ANSI_PADDING 为 OFF,则定义为 NULL 的 char 列将作为 varchar 处理。 

1.NULL值(空值)。 

a. char列的NULL值占用存储空间。 

b. varcahr列的NULL值不占用存储空间。 

c. 插入同样数量的NULL值,varchar列的插入效率明显高出char列。 

2.插入数据 

无论插入数据涉及的列是否建立索引,char的效率都明显低于varchar。 

3. 更新数据 

如果更新的列上未建立索引,则char的效率低于varchar,差异不大;建立索引的话,效率较高。 

4. 修改结构 

a. 无论增加或是删除的列的类型是char还是varchar,操作都能较快的完成,而且效率上没有什么差异。 

b. 对于增加列的宽度而言,char与varchar有非常明显的效率差异,修改varcahr列基本上不花费时间,而修改char列需要花费很长的时间。 

5.数据检索 

无论是否通过索引,varchar类型的数据检索略优于char的扫描。 

选择char还是选择varchar的建议 

1.适宜于char的情况: 

a. 列中的各行数据长度基本一致,长度变化不超过50字节; 

b. 数据变更频繁,数据检索的需求较少。 

c. 列的长度不会变化,修改char类型列的宽度的代价比较大。 

d. 列中不会出现大量的NULL值。 

e. 列上不需要建立过多的索引,过多的索引对char列的数据变更影响较大。 

2.适宜于varchar的情况; 

a. 列中的各行数据的长度差异比较大。 

b. 列中数据的更新非常少,但查询非常频繁。 

c. 列中经常没有数据,为NULL值或为空值 

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

■■■【nchar [ ( n ) ]】 

n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。 

■■■【nvarchar [ ( n | max ) ] 】

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

***

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

如果列数据项的大小可能相同,请使用 nchar。 

如果列数据项的大小可能差异很大,请使用 nvarchar。 

sysname 是系统提供的用户定义数据类型,除了不可为空值外,在功能上与 nvarchar(128) 相同。sysname 用于引用数据库对象名。 

为使用 nchar 或 nvarchar 的对象分配的是默认的数据库排序规则,但可使用 COLLATE 子句分配特定的排序规则。 

SET ANSI_PADDING ON 永远适用于 nchar 和 nvarchar。SET ANSI_PADDING OFF 不适用于 nchar 或 nvarchar 数据类型。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/545968.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 照相功能

使用内置的Camera 应用程序捕获图像 探索Android 所提供的内置功能&#xff0c;内置的图像捕获与存储功能为Android 上全部媒体功能提供了一个非常好的切入点&#xff0c;为我们在以后的章节中处理音频和视频奠定了基础。如今介绍怎样利用内置的Camera&#xff08;摄像头&#…

皮尔逊相关性_皮尔逊的相关性及其在机器学习中的意义

皮尔逊相关性Today we would be using a statistical concept i.e. Pearsons correlation to help us understand the relationships between the feature values (independent values) and the target value (dependent value or the value to be predicted ) which will furt…

磊哥最近面试了好多人,聊聊我的感受!(附面试知识点)

这是我的第 84 篇原创文章作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;一些读者可能知道&#xff0c;磊哥前段时间又回来上班了&#xff0c;详见《磊哥又滚回职场了...》…

M4 宏处理器

2019独角兽企业重金招聘Python工程师标准>>> M4 宏处理器 Brian W. KernighanDennis M. Ritchie Bell LaboratoriesMurray Hill, New Jersey 07974 翻译&#xff1a;寒蝉退士 译者声明&#xff1a;译者对译文不做任何担保&#xff0c;译者对译文不拥有任何权利并且不…

oracle的nvl和nvl2

NVL( string1, replace_with) 功能&#xff1a;如果string1为NULL&#xff0c;则NVL函数返回replace_with的值&#xff0c;否则返回string1的值&#xff0c;如果两个参数都为NULL &#xff0c;则返回NULL。NVL2(expr1,expr2,expr3)功能&#xff1a;oracle中常用函数&#xff0c…

Java SecurityManager checkAwtEventQueueAccess()方法与示例

SecurityManager类的checkAwtEventQueueAccess()方法 (SecurityManager Class checkAwtEventQueueAccess() method) checkAwtEventQueueAccess() method is available in java.lang package. checkAwtEventQueueAccess()方法在java.lang包中可用。 checkAwtEventQueueAccess() …

绝了,几款主流的 JSON 库性能对比!

本篇通过JMH&#xff08;Oracle官方测试框架&#xff09;来测试一下Java中几种常见的JSON解析库的性能。每次都在网上看到别人说什么某某库性能是如何如何的好&#xff0c;碾压其他的库。但是百闻不如一见&#xff0c;只有自己亲手测试过的才是最值得相信的。JSON不管是在Web开…

DWZ使用笔记

DWZ使用笔记 一、前言 在近期的一个项目中&#xff0c;引入了DWZ这个富client框架&#xff0c;算是一次尝试吧。期间也遇到不少问题&#xff0c;总算一一攻克了。特以此文记之。本人用的是dwz-ria-1.4.5Asp.net webform&#xff0c;写这篇笔记时最新版本号已经是1.4.6了。DWZ官…

Dynamic_Performance_Tables_not_accessible_问题_解决不能动态统计

Dynamic Performance Tables not accessible, Automatic Statistics Disabled for this session You can disable statistics in the preference menu,or obtanin select priviliges on the v$session,v$sesstat and v$statname tables第一种处理方法&#xff08;不推荐&#x…

ruby三元操作符_在Ruby中使用操作符将元素添加到数组实例中

ruby三元操作符In the previous articles, we have gone through ways through which we can create Array instances. Some of them were Public instance methods and some were Public class methods. We should also know how they both differ from each other. Now we kn…

阿里的简历多久可以投递一次?次数多了有没有影响?可以同时进行吗?

最近&#xff0c;无论是读者群&#xff0c;还是公众号后台&#xff0c;很多人都比较关注以下几个问题&#xff1a;阿里的简历是半年只能投递一次吗&#xff1f;阿里的面试可以多个部门同时进行吗&#xff1f;面试没过&#xff0c;又被系统捞起来了&#xff0c;我该怎么办&#…

c语言给定一个非空整数数组_C程序检查给定整数的所有位是否为一(1)

c语言给定一个非空整数数组Problem statement: Write a C Program to check if all the bits of a given integer is one (1). 问题陈述&#xff1a;编写一个C程序来检查给定整数的所有位是否都是一(1) 。 Solution: We can use bitwise operator here to solve the problem. …

记一次蚂蚁金服面试被虐经历

本文来自作者投稿&#xff0c;原作者&#xff1a;yes面试前的小姐姐来说说前不久蚂蚁金服一面的情况。说来也是巧合&#xff0c;当时在群里有位蚂蚁金服的小姐姐发了个内推&#xff0c;看了下JD感觉可以试试于是就私聊了小姐姐发简历内推了。我16年也就是大三上就开始实习了&am…

本地连接和音量图标显示

一种&#xff1a;“控制面板”——“声音和音频设备”——“将音量图标放入任务栏”曾经手动关掉了。只要打开就行了。 第二种&#xff1a;“将音量图标放入任务栏”打勾&#xff0c;无效。丢失sndvol32.exe&#xff0c;文件路径C:\WINDOWS\system32&#xff0c;可以在别的机子…

用python + openpyxl处理excel(07+)文档 + 一些中文处理的技巧

2019独角兽企业重金招聘Python工程师标准>>> 寻觅工具 确定任务之后第一步就是找个趁手的库来干活。 Python Excel上列出了xlrd、xlwt、xlutils这几个包&#xff0c;但是 它们都比较老&#xff0c;xlwt甚至不支持07版以后的excel它们的文档不太友好&#xff0c;都可…

Spring Boot 2.3.3 正式发布!

Spring Boot 2.3.3 稳定版已发布&#xff0c;可从 repo.spring.io 和 Maven Central 获取。<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.3.RELEASE</versio…

木板最优切割利润最大_最多进行K笔交易的股票最大买卖利润

木板最优切割利润最大This is a very popular interview problem to find maximum profit in stock buying and selling with at most K transactions. This problem has been featured in the interview rounds of Amazon. 这是一个非常受欢迎的面试问题&#xff0c;目的是在最…

禁止访问磁盘的注册表

百度的了一个禁止访问磁盘的注册表问题怎么禁止访问磁盘&#xff0c;手动操作就会&#xff0c;可是有好几十台啊。手动搞&#xff0c;那个累啊。求个高手&#xff0c;帮我弄个注册表或者BAT文件执行都可以&#xff0c;禁止访问D盘跟E盘。网上找了很多资料&#xff0c;都叫用工具…

C语言文本文件与二进制文件转换

本程序要自己创建个文本格式的输入文件a1.txt&#xff0c;编译后能将文本文件前255字节以内的字符转换成相应的AscII码值的二进制表示&#xff0c;并存入输出文件a2.txt中。然后再将二进制文件还原并存入a3.txt文件。实现文件之间的转换。 具体代码如下&#xff1a; #include …

[数据库]Oracle和mysql中的分页总结

Mysql中的分页物理分页•在sql查询时&#xff0c;从数据库只检索分页需要的数据•通常不同的数据库有着不同的物理分页语句•mysql物理分页&#xff0c;采用limit关键字•例如&#xff1a;检索11-20条 select * from user limit 10,10 ;* 每次只查询10条记录.当点击下一页的时候…