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)那个效率没太大影响 主要是存储数据选择数据类型要‘慎重’考虑