很奇怪的java、oracle中文问题
oracle 客户端字符集:
在注册表中,ORACLE-->HOME0-->NLS_LANG 的值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
oracle 服务器字符集:
select userenv('language') from dual;
USERENV('LANGUAGE')
-----------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
oracle 版本:
select banner from sys.v_$version;
BANNER
----------------------------------------------------------------
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
PL/SQL Release 8.1.6.0.0 - Production
CORE 8.1.6.0.0 Production
TNS for 32-bit Windows: Version 8.1.6.0.0 - Production
NLSRTL Version 3.4.1.0.0 - Production
运行环境:JBuilder 7、JDK 1.4.2-b28
测试SQL语句:
INSERT INTO TESTUSER
(TESTUSER_ID,TESTUSER_PASSWORD)
VALUES ('中文','123456')
用PL/SQL测试,插入没有任何问题。把这个SQL语句放入JAVA程序(一个简单的不能再简单的Application),执行以后发现数据库中是乱码。我试着作了UTF-8-->GBK、ISO-8859-1-->GBK的转换,都不行。哪位高人指点迷津。
问题点数:200、回复次数:6Top
1 楼steven_cheng(286)回复于 2003-09-01 17:44:09 得分 0
补充一下:Oracle Server的操作系统是Win2K professionalTop
2 楼ticlej(ticlej)回复于 2003-09-01 19:14:30 得分 70
我一直使用楼主的环境开发,没发现问题啊。
如果是在有这个问题:
先确认:1。jdbc是不是适合的。
2。直接写sql="insert into TESTUSER values('中文','中文')"执行,如果不行则可能是jdbc驱动问题了。
Top
3 楼Wnyu(西门吹水II -- 单脚站在独木桥上)回复于 2003-09-01 20:06:10 得分 60
1. 我不敢肯定这句究竟是取服务器是户端的字符集。"select userenv('language') from dual;" 到服务器的注册表再看一下。
Top
4 楼steven_cheng(286)回复于 2003-09-02 09:38:52 得分 0
to ticlej(ticlej):
我也怀疑是JDBC驱动的问题,所以下载了一个8.17的最新驱动,还是不行。
to Wnyu(已被封杀):
其实我的服务器和客户端在一台机器上,就是本机,开发也在这台机器上。Top
5 楼phoenix7789(火鸟)回复于 2003-09-02 11:25:22 得分 70
在写入数据库之前先把中文转化为ISO8859_1型,读出以后先转化为根本312再显示。
String zh = new String("中文".getByte("gb2312"),"iso8859_1");
然后把转化的zh插入数据库。
从数据库读出之后,先用:
String zh = new String("中文".getByte("iso8859_1"),"gb2312");
然后再显示。
--------------------------
让生命时刻充满着激情!
Top
6 楼steven_cheng(286)回复于 2003-09-03 17:39:29 得分 0
靠,我是修改别人的代码,昨天才发现原来他还把Oracle的Connection封装了,每次执行SQL的时候都作了GBK to ISO的转换。害我找了2、3天。冤枉死了。
散分!Top




