乱码产生是由于几个字符集之间转换不匹配造成,分以下几种情况:(注:字符集之间如果不存在子集、超集对应关系时的情况不予考虑,因为这种情况下字符集之间转换必产生乱码)    1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同如果客户端NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。    2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同如果客户端应用字符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题.   上面2个段定义正确么?如果正确请说明原因,不正确也请说明原因.

解决方案 »

  1.   

    还有什么困惑呀,兄弟。 1)服务器端数据库字符集与客户端应用字符集相同,与客户端NLS_LANG参数设置不同如果客户端NLS_LANG字符集是其它两种字符集的子集,转换过程将出现乱码。 
    正确,服务器和客户端的转码,只看NLS_LANG和服务器端,可客户端的应用字符集无关。
     2 )服务器端数据库字符集与客户端NLS_LANG参数设置相同,与客户端应用字符集不同如果客户端应用字符集是其它两种字符集的超集时,转换过程将出现乱码,但对于单字节编码存储中文问题
    正确。
    NLS_LANG和服务器端一致,所以保证这条线上是没有转码的,所以不出现乱码,但是客户端应用字符集是其它两种字符集的超集, 客户端应用程序本身的字符编码在服务器上不支持,所以出现问题。
      

  2.   

    貌似还是看客户端NLS_LANG设置的
      

  3.   

    楼主:我送你一句话,实践出真知!没实践过的东西,我想怎么说就怎么说。
    ORACLE 随时都能看到乱码。你到ORACLE 里面建一张表,全都中文表名,字段名
    然后到系统视图 user_tables 里面看下,那里就是乱码。装ORACLE 的时候你就默认 UTF8字符集就行了。不要在这样的问题上给自己找麻烦。
    因为ORACLE 毕竟是外国人发明的,他哪知道将来存的是中文?能准确给你存储,不出错就行了。