【面试虐菜】—— Oracle中CHAR、VARCHAR的区别

1、CHAR。

  CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的时候可能要多次用到trim()。

2、VARCHAR。

  存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。 

3、TEXT。

  text存储可变长度的非Unicode数据,最大长度为2^31-1(2,147,483,647)个字符。

4、NCHAR、NVARCHAR、NTEXT。

  这三种从名字上看比前面三种多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。 
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

  他们的区别概括成:
CHAR,NCHAR 定长,速度快,占空间大,需处理
VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理
NCHAR、NVARCHAR、NTEXT处理Unicode码 

例子

1. create table a (name1 varchar(8)) 

insert a select '张红a'
--- 存储长度为5个字节,余下的3个字节全部释放

insert a select '王一南'
----存储长度为6个字节,余下的2个字节全部释放
---意思是varchar变长字符数据类型与存储数据的实际长度是一致的 

2. create table aa (name1 nvarchar(8)) 

insert aa select '张红a'
--- 存储长度为6个字节,余下的2个字节全部释放

 

本文转自博客园xingoo的博客,原文链接:【面试虐菜】—— Oracle中CHAR、VARCHAR的区别,如需转载请自行联系原博主。

时间: 2025-01-28 07:18:06

【面试虐菜】—— Oracle中CHAR、VARCHAR的区别的相关文章

【面试虐菜】—— Oracle知识整理《收获,不止Oracle》

普通堆表不足之处:     表更新有日志开销     表删除有瑕疵     表记录太大检索较慢     索引回表读开销很大     有序插入难有序读出 DELETE产生的undo最多,redo也最多,因为undo也需要redo保护 全局临时表: 1 高效删除记录 基于事务的全局临时表commit或者session连接退出后,自动删除 基于回话的全局临时表在退出回话后自动删除 2 针对不同的会话数据独立,不同的session访问全局临时表,看到的结果不同 全局临时表在程序的一次调用执行过程中,需要

【面试虐菜】—— JAVA面试题(1)

今天参加笔试,里面有设计模式,和一些基础题! 印象最深的是:什么不是Object的函数,我蒙的finalize,哎,无知! 还问了,接口与抽象类的不同,还有多线程的实现方式!下面基本都有. 另外还问了,观察者模式,设计模式,我一点不会,看来要下功夫了! 1.  面向对象编程的三大特性是什么,请简要阐述 (1).继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法.对象的一个新类可以从现有的类中派生,这个过程称为类继承.新类继 承了原始类的特性,新类称为原始类

【面试虐菜】—— 常用SQL语句

创建表 create table emp( id decimal, name char(10), age decimal) 删除表 DROP TABLE EMP 插入默认值 CREATE TABLE EMP( Id decimal NOT NULL, Name char(10) NOT NULL, Age decimal NOT NULL DEFAULT 18) 添加列 ALTER TABLE EMP ADD COLUMN Comments char(50) NOT NULL DEFAULT '

【面试虐菜】—— MongoDB知识整理

为什么我们要使用MongoDB? 特点: 高性能.易部署.易使用,存储数据非常方便.主要功能特性有: 面向集合存储,易存储对象类型的数据. 模式自由. 支持动态查询. 支持完全索引,包含内部对象. 支持查询. 支持复制和故障恢复. 使用高效的二进制数据存储,包括大型对象(如视频等). 自动处理碎片,以支持云计算层次的扩展性 支持Python,PHP,Ruby,Java,C,C#,Javascript,Perl及C++语言的驱动程序,社区中也提供了对Erlang及.NET等平台的驱动程序. 文件存

【面试虐菜】—— JAVA面试题(2)

1 String = 与 new 的不同 使用"="赋值不一定每次都创建一个新的字符串,而是从"字符串实例池"中查找字符串.使用"new"进行赋值,则每次都创建一个新的字符串. 2 String与StringBuffer String类是不可变类,字符串一旦初始化后,就不能被改变.而StringBuffer类是可变类,字符串值可以呗改变.常常在实际应用中看到累死这样的代码:String s=new("hello");s+=&q

【面试虐菜】—— JAVA面试题(3)

1 throws与throw的区别 解析:throws和throw是异常处理时两个常见的关键字,初级程序员常常容易正确理解throw和throws的作用和区别,说明已经能比较深入理解异常处理.Throw用来抛出异常,如果执行了throw语句,程序将发生异常,进入到异常处理机制.Throws用来声明异常,说明这个方法可能会发生某些类型的异常,那么编译器将强制在调用这个方法的时候处理异常.API中的很多方法都使用了throws声明了异常,所以使用这些方法时编译器会提示需要处理异常.   参考答案:t

【面试虐菜】—— Apache知识整理

Apache性能调优1 Apache 部分: 1. 移除不用的模块. 2. 使用 mod_disk_cache NOT mod_mem_cache . 3. 扁平架构配置mod_disk_cache. 4. 安装恰当的Expires, Etag, 和 Cache-Control Headers . 5. 将缓存放在独立的磁盘 6. 使用管道日志替代直接记录 7. 将日志放在不同的磁盘 8. 使用 mod_gzip/mod_deflate . 9. 将HostnameLookups关闭. 10.

浅析Oracle中char和varchar2的区别

以下是对Oracle中char和varchar2的区别进行了分析介绍,需要的朋友可以过来参考下   char是定长的 char(10)   varchar2(10)  同样存 a ,char占用了10个字符,varchar2 只占用了 一个字符(一个中文占两个字符,英文占一个). 但是char的查询速度要比varchar2快.varchar2,Oracle还要进行语法分析,这个字段是多少位的,所以慢一些.相对于上千万的记录来说. 一般的项目 没什么区别,随便用.

C#和C++中char类型的区别

对于char,这个字符类型.我们一般都认为就是一个字节.今天在仔细比较发现,C#的char和C++的char是有区别的. 1.首先来看C#中char占多大空间 using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine(siz