总是弄不明白,也查了N多资料,问个N多人.都千篇一律的说varchar2和nvarchar2有和区别,但就没人说清到底什么时候什么环境,必须用nvarchar2。因为在实际中我发现即使使用varchar2也能存放中文。简单问:
在选择varchar2和nvarchar2时,什么时候什么环境,必须用nvarchar2?
相应的clob和nclob也有这样的疑问。

解决方案 »

  1.   


    汉字比较多的情况下建议用NVARCHARE2 普通的建议用varchar。
      

  2.   

    【转载】VARCHAR2(size):可变长度的字符串,其最大长度为 size 个字节。size 的最大值是 4000,而最小值是 1。您必须指定一个 VARCHAR2 的 size。 NVARCHAR2(size):可变长度的字符串,依据所选的国家字符集,其最大长度为 size 个字符或字节。size 的最大值取决于存储每个字符所需要的字节数,其上限为 4000 个字节。您必须为 NVARCHAR2 指定一个 size。 相同点:都是可变长度字符串(char类型是不变长度),都必须指定大小不同点:VARCHAR2存放的英文字符只占一个字节,而nvarchar2依据所选的字符集,大多为两个总结:在存贮一些特殊的字符时应选用nvarchar2,然而varchar2比较节省空间
      

  3.   

    但是,有时出现乱码问题,是因为没使用nvarchar2造成的?什么环境下,使用什么数据类型,可能造成乱码问题,急需要弄明白这个啊.
      

  4.   

    我问的也是字符集的问题.........什么环境该用什么字符集,该选什么类型,这不是相关的吗?难道是,只要选对字符集后,varchar2和nvarchar2就都无所谓,不会出现乱码了?
      

  5.   

    这个建议有点问题。oracle做这个设计,主要是为了解决全球化兼容问题。差别就是varchar2的字符集是NLS_CHARACTERSET指定。nvarchar2字符集是NLS_NCHAR_CHARACTERSET指定。比如你的数据库字符集是不支持中文的西文字符集,现在你想存放中文,如果去修改数据库字符集,极容易出错且oracle也不推荐这么做。
    那么这时你就可以把新字段类型设为nvarchar2,用来存放中文。
    因为NLS_NCHAR_CHARACTERSET就支持两种字符集:AL16UTF16、UTF8。这是两个unicode字符集,可存所有字符。同时,如果你的数据库字符集本来就是ZHS16GBK,而NLS_NCHAR_CHARACTERSET是AL16UTF16,这两个字符集都是用2个字节存一个中文字,
    那么即使你的所有表所有字段都是汉字,用varchar2与nvarchar2,都没有分别。这个情况下也就不存在汉字比较多的情况下建议用哪种字符集。当然在西文字符占多数,汉字只有一两个字段的时候,用西文字符集+nvarchar2确实能节约空间。
      

  6.   


    补充一下
    varchar字符集是NLS_CHARACTERSET指定,所以存储的时候的字节数与这个有关,比如如果是GBK的话,那么一个字符是两个字节,varchar(10)也只能存5个中文了Nvarchar字符集是国家字符集,以unicode的形式来存字符,有UTF16,UTF8两种选择,而不受上面的数据库字符集影响,所以NVARCH(10)就是10个中文,也可以存10个日文,是用来做国际化的一种解决方案。