日期:2014-05-17  浏览次数:21022 次

oracle 数据库读出的中文是一串正方形乱码
我用vs2008的vb写一个程序,但是从数据库oracle中读出中文,然后赋值给textbox,但结果是一串正方形乱码,求解怎么处理这个问题

------解决方案--------------------
select userenv('language') from dual; 输出的字符集必须能够支持中文。

注册表中,或者你在程序运行变量中设置NLS_LANG 能够反应你程序所使用的字符集。以便数据库能够正确给你转码
------解决方案--------------------
百度有人说。。
利用System.Data.OleDb.OdbcConnection类访问数据,可以解决编码AMERICAN_AMERICA.US7ASCII读取中文乱码的问题。。可以试试看

连接字符串:"Provider=MSDAORA.1;Data Source=(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.20.0.5)(PORT = 1521)))(CONNECT_DATA = (SID = DEV))) ;User Id=lswen;Password=1169"

另外的说法。。
依據測試的結果顯示 CoreLab 公司的 OraDirect.NET 可在此狀況下正確顯示中文,執行效率也較 OLE-DB Provider 來的高。


------解决方案--------------------
修改注册表即可。
HTML code
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0]
"ID"="0"
"ORACLE_GROUP_NAME"="Oracle - OraHome81"
"ORACLE_HOME_NAME"="OraHome81"
"ORACLE_HOME"="E:\\oracle\\ora81"
"NLS_LANG"="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
"ORACLE_HOME_KEY"="Software\\ORACLE\\HOME0"
"SQLPATH"="E:\\oracle\\ora81\\dbs"
"MSHELP_TOOLS"="E:\\oracle\\ora81\\MSHELP"

------解决方案--------------------
如果数据库字符集是AMERICAN_AMERICA.US7ASCII 理论上是不能存储中文的。AMERICAN_AMERICA.US7ASCII是单字节字符集,而中文最少要两个字节。如果不能将数据库修改为建议使用zhs16gbk(中文支持很好),或者al32utf8(支持多语言)

当然,有一种方法,可以欺骗数据库,让中外正确显示,那就是把注册表的nls_lang 修改为AMERICAN_AMERICA.US7ASCII。一般不建议这么做,因为将来备份、数据交换的时候很容易乱码。
------解决方案--------------------
如果要欺骗数据库修改为
"NLS_LANG"="AMERICAN_AMERICA.US7ASCII"

如果要数据库能够真正存储中文,修改数据库字符集.在创建数据库的时候设置的.
------解决方案--------------------
这明明就是你VS编码格式的问题,和数据库有什么关系。
------解决方案--------------------
这种欺骗数据库的方法,只能读出vs写入的(而且你的设置要正确,实际这种方法就是多语言系统中常用的 "透传",保证二进制码不变,意义由使用者解析) .如果是别人写入,你是读不出来的.

建议修改数据库字符集.