oracle字符 varchar2 nvarchar2

[color=red]A
1:不管是GB还是BIG5,它都是用两个字节来保存一个汉字 
  2:一个汉字的两个字节中,第一个字节的字符>127,第二个 
  字节就不一定了 
  3:例如: 
  
  char   cStr[81]="abc123你好123abc";  
  for(int   i=0;i<strlen(cStr);i+=2)//注意,i+=2  
  {  
      if(cStr[i]>127)//第i与i+1这两个字节是一个汉字  
      {  
          do   something  
      }  
  }


B.想测试一个汉字在各种字符集中到底占用多少字节,请尝试一下语句 
  select   lengthb('汉')   from   dual;
[/color]

注意 !
varchar早就建议不使用了,应该用VARCHAR2。nvarchar估计也不使用的,也应该是使用nvarchar2。
VARCHAR2(size),可变长度的字符串,其最大长度为 size 个字节。size 的最大值是 4000,而最小值是 1。您必须指定一个 VARCHAR2 的 size。
NVARCHAR2(size),可变长度的字符串,依据所选的国家字符集,其最大长度为 size 个字符或字节。size 的最大值取决于存储每个字符所需要的字节数,其上限为 4000 个字节。您必须为 NVARCHAR2 指定一个 size。
VARCHAR2与NVARCHAR2的不同之处在于它们存放信息占用的空间不同。VARCHAR2存放的英文字符只占一个字节,而nvarchar2依据所选的字符集,大多为两个。


关于什么时候用到nchar等国家字符集

只有要用到unicode时才会用到nvarch,比如中文的很多冷僻字.
oracle对uncode的解决有两者方案:一种时数据库级的这要求在安装数据库的时必须选择unicode数据库字符集,这样不管是varcha还是nvarchar都可以存储unicode,也就是说两者没有区别.
另一种是数据类型级,即国家字符集,也就是nvarchar2,就是说当你的数据库字符集不是unicode,比如ZHS16GBK,但又想在个别字段存储诸如中文冷僻字的unicode字符时,就可以选择nvarchar2,但必须9i版本以上的.

你可能感兴趣的:(oracle)