原来的数据库用的是9i ,字符集是US7ASCII,开发时用的是字符集ZHS16GBK。项目开发完了未来保持和原来的环境一样,修改了10g的字符集为US7ASCII。注册表中的字符集改成了US7ASCII
现象:plsql查询可以看到正常的汉子,但是在web端从数据中拿到的数据只要是中文的都是问号求高手赐教!!!

解决方案 »

  1.   

    知道是字符集编码的问题 但是不知道怎么修改,在网上搜了一些解决方法,但是解决不了。例如:1.运行,regedit
    第一步选HKEY_LOCAL_MACHINE,第二步选择SOFTWARE, 第三步选择 ORACLE, 第四步选择 NLS_LANG, 键 入 与服 务 器 端 相 同 的 字 符 集(本例为:AMERICAN_AMERICAN.US7ASCII)。
    2.修改系统的环境变量
    右击我的电脑,然后点击属性,“高级”页面下,点击“环境变量”,在系统变量中添加:
    变量名:NLS_LANG
    变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    运行cmd,输入echo %NLS_LANG%,查看系统变量设置时否成功我这样做了在web端查询出来的数据也是乱码
      

  2.   

    --要解决这个问题有两种方法--一个是,利用INTERNAL_USE 关键字修改区域设置,--还有一个是利用re-create,但是re-create有点复杂,所以请用internal_use,SQL>SHUTDOWN IMMEDIATE;SQL>STARTUP MOUNT EXCLUSIVE;SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;SQL>ALTER DATABASE OPEN;SQL>alter database national character set internal_use utf8;SQL>alter database character set internal_use zhs16gbk;SQL>SHUTDOWN immediate;SQL>startup;--如果按上面的做法做,National charset的区域设置就没有问题--2、修改dmp文件字符集--上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘--骗’过oracle的检查。
    --这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我---们常用的一些字符集,
    --如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响----不--大。--具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。--比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:   
    SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;0354--然后将dmp文件的2、3字节修改为0354即可。--如果dmp文件很大,用ue无法打开,就需要用程序的方法了
      

  3.   

    http://blog.sina.com.cn/s/blog_4cb222720100pvmk.html 参考这个!!!
      

  4.   

    回复4楼的 ORACLE 9i ---> 10g就是这样该的字符集编码格式的