总是弄不明白,也查了N多资料,问个N多人.都千篇一律的说varchar2和nvarchar2有和区别,但就没人说清到底什么时候什么环境,必须用nvarchar2。因为在实际中我发现即使使用varchar2也能存放中文。简单问:
在选择varchar2和nvarchar2时,什么时候什么环境,必须用nvarchar2?
相应的clob和nclob也有这样的疑问。
在选择varchar2和nvarchar2时,什么时候什么环境,必须用nvarchar2?
相应的clob和nclob也有这样的疑问。
汉字比较多的情况下建议用NVARCHARE2 普通的建议用varchar。
那么这时你就可以把新字段类型设为nvarchar2,用来存放中文。
因为NLS_NCHAR_CHARACTERSET就支持两种字符集:AL16UTF16、UTF8。这是两个unicode字符集,可存所有字符。同时,如果你的数据库字符集本来就是ZHS16GBK,而NLS_NCHAR_CHARACTERSET是AL16UTF16,这两个字符集都是用2个字节存一个中文字,
那么即使你的所有表所有字段都是汉字,用varchar2与nvarchar2,都没有分别。这个情况下也就不存在汉字比较多的情况下建议用哪种字符集。当然在西文字符占多数,汉字只有一两个字段的时候,用西文字符集+nvarchar2确实能节约空间。
补充一下
varchar字符集是NLS_CHARACTERSET指定,所以存储的时候的字节数与这个有关,比如如果是GBK的话,那么一个字符是两个字节,varchar(10)也只能存5个中文了Nvarchar字符集是国家字符集,以unicode的形式来存字符,有UTF16,UTF8两种选择,而不受上面的数据库字符集影响,所以NVARCH(10)就是10个中文,也可以存10个日文,是用来做国际化的一种解决方案。