http://blog.itpub.net/28602568/viewspace-759789/

 

varchar 、varchar2、nvarchar、nvarchar2  -->存储可变的字符串

 

varchar 、varchar2:
varchar:汉字全角等字符占2字节,数字、字母均1个字节
varchar2:一般所有字符都占2个字符处理,主要也看数据库的编译格式
    GBK :汉字占2字节,英文1字节  -->(oracle 按照默认GBK编码格式)
    UTF-8:汉字3字节,英文1字节   -->select userenv('language') from dual;查看oracle 编码格式
区别:
varchar2 空串=null  “(insert into '' )--->select .. where id is null” 可以查到,varchar类型的空串就按''空串处理,not null查不到
建议使用Oracle提供的特定数据类型varchar2,可以保证VARCHAR2在任何版本中该数据类型都可以向上和向下兼容(varchar oracle不建议使用)
---->varchar2适合存储英文
nvarchar、nvarchar2  :
nvarchar(n):存入n个英文/汉字/中文组合    10指字符数不是字节数      nvarchar类型中文2字节  英文1字节
nvarchar2:字符均按2字节计算  nvarchar(20)-->可存入20个2字节的内容  -->虽占更多空间,兼容性好
NVARCHAR2和VARCHAR2的区别
1、NVARCHAR2(10)-->10中/10英 (nvarchar’2‘适合存储中文)
2、VARCHAR2(10) -->最多5中/10英  适合存储英文

 

  datatypes 官网: http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm 

 

 

 

声明
这里的user_segments.blocks=user_tables.blocks+user_tables.empty_blocks
dba_tables.BLOCKS  Number of used data blocks in the table
dba_tables.EMPTY_BLOCKS  Number of empty (never used) data blocks in the table
dba_segments.blocks Size, in Oracle blocks, of the segment

从合理利用空间和兼容性上考虑建议:
如果该列有大量的英文则用varchar2
如果该列有大量的中文则用nvarchar2


总结:
英文就不说了,varchar2存入英文 1字节  nvarchar2 存英文是2字节  
所以建议不要在nvarchar2中存入英文  太浪费空间了
测试下5个汉字 的varchar2(10)和 nvarchar2(5)那个效率高:

 

经测试 5个汉字 的varchar2(10)和 nvarchar2(5)那个效率没太大影响 主要是存储数据选择数据类型要‘慎重’考虑

 

posted @ 2015-03-28 16:12  JIN__JIN  阅读(361)  评论(0编辑  收藏  举报