
1. varchar 变长字段按数据内容实际长度存储,存储空间小,可以节省存储空间;
2. char 按声明大小存储,不足补空格;
3. 其次对于查询来说,在一个相对较小的字段内搜索,效率更高;
五、技术延伸,
char
与
varchar2
的区别?
1、 char 的长度是固定的,而 varchar2 的长度是可以变化的。
比如,存储字符串
“101” ,对于 char(10) ,表示你存储的字符将占10个字节(包括7个空字符),在数
据库中它是以空格占位的,而同样的
varchar2(10) 则只占用3个字节的长度,10只是最大值,当你存储
的字符小于
10
时,按实际长度存储。
2、
char 的效率比 varchar2 的效率稍高。
3、何时用
char ,何时用 varchar2 ?
char 和 varchar2 是一对矛盾的统一体,两者是互补的关系, varchar2 比 char 节省空间,在效率上
比
char 会稍微差一点,既想获取效率,就必须牺牲一点空间,这就是我们在数据库设计上常说的“以空
间换效率
”
。
varchar2 虽然比 char 节省空间,但是假如一个 varchar2 列经常被修改,而且每次被修改的数据的长
度不同,这会引起“行迁移”现象,而这造成多余的I/O,是数据库设计中要尽力避免的,这种情况下用
ch
ar 代替 varchar2 会更好一些。 char 中还会自动补齐空格,因为你 insert 到一个 char 字段自动补充
了空格的,但是
select 后空格没有删除,因此 char 类型查询的时候一定要记得使用 trim ,这是写本文
章的原因。
如果开发人员细化使用
rpad() 技巧将绑定变量转换为某种能与 char 字段相比较的类型(当然,与截
断
trim 数据库列相比,填充绑定变量的做法更好一些,因为对列应用函数 trim 很容易导致无法使用该
列上现有的索引),可能必须考虑到经过一段时间后列长度的变化。如果字段的大小有变化,应用就会
受到影响,因为它必须修改字段宽度。
正是因为以上原因,定宽的存储空间可能导致表和相关索引比平常大出许多,还伴随着绑定变量问题,
所以无论什么场合都要避免使用
char
类型。
六、
where
中使用默认值代替
null
1
、反例
相关文档
评论