char和varchar区别

char类型:对英文(ASCII)字符占用1个字节,对一个汉字占用2个字节,char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间。因为是固定长度,所以速度效率高。

varchar类型:varchar的类型不以空格填满,比如varchar(100),但它的值只是"qian",则它的值就是"qian"。

而char不一样,比如char(100),它的值是"qian",而实际上它在数据库中是"qian"(qian后共有96个空格,就是把它填满为100个字节)。

varchar存储变长数据,但存储效率没有char高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为varchar(10)是最合算的。varchar类型的实际长度是它的值的实际长度+1。为什么“+1”呢?这一个字节用于保存实际使用了多大的长度。

1.char的长度是固定的,而varchar2的长度是可以变化的,比如,存储字符串“abc",对于char(20),表示你存储的字符将占20个字节(包括17个空字符),而同样的varchar2(20)则只占用3个字节的长度,20只是最大值,当你存储的字符小于20时,按实际长度存储。由于char是以固定长度的,所以它的速度会比varchar快得多!但程序处理起来要麻烦一点,要用trim之类的函数把两边的空格去掉!

2.char的效率比varchar2的效率稍高。

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

何时该用char,何时该用varchar?

char与varchar2是一对矛盾的统一体,两者是互补的关系。

varchar2比char节省空间,在效率上比char会稍微差一些,即要想获得效率,就必须牺牲一定的空间,这也就是我们在数据库设计上常说的‘以空间换效率’。

varchar2虽然比char节省空间,但是如果一个varchar2列经常被修改,而且每次被修改的数据的长度不同,这会引起‘行迁移’(RowMigration)现象,而这造成多余的I/O,是数据库设计和调整中要尽力避免的,在这种情况下用char代替varchar2会更好一些。

最新文章

  1. eclipse为方法添加注释的快捷键是什么
  2. Memcached原理分析
  3. javascript splice
  4. 【Symmetric Tree】cpp
  5. 如何在Ubuntu下启动Apache的Rewrite功能
  6. Html 小插件9 腾讯新闻
  7. C语言学习心得
  8. Nodejs前端服务器压缩图片
  9. 27 ArcMap加载天地图服务一片空白怎么办
  10. Win32知识之窗口绘制.窗口第一讲
  11. Java实现Base64加密
  12. C# LnkHelper
  13. jmeter 二次开发
  14. linux中jdk的安装与配置
  15. 低级问题: jquery-ajax-alert(data) <!DOCTYPE html PUBLIC "-
  16. 【转】Graphics 关于呈现质量与合成模式
  17. ES6必知必会 (一)—— 变量声明和结构赋值
  18. Redis初探(windows/linux安装)
  19. [转] 职业规划:一个老鸟眼中“IT民工”的发展方向
  20. 【BZOJ1176】Mokia(CDQ分治)

热门文章

  1. [GRYZ2015]Graph
  2. 基于GPL329xx linux平台电容屏gsl1680的驱动调试分析
  3. ini_set /ini_get函数功能-----PHP
  4. C# 释放非托管资源
  5. leetcode@ [352] Data Stream as Disjoint Intervals (Binary Search & TreeSet)
  6. 第二百五十六天 how can I 坚持
  7. Mybatis中实体类中的字段跟对应表的字段不一致时解决办法
  8. POJ 3237 Tree (树链剖分 路径剖分 线段树的lazy标记)
  9. CodeForces 589I Lottery (暴力,水题)
  10. python的random模块