Thread: I can't insert the chinese words.
Hello all, I use the "(2003-02-09) JDBC3 JDK 1.4" JDBC driver to access the DB. When I insert the chinese words (local= zh_TW ,"BIG5") into the varchar column,it become "???". But if I use the pgAdmin to do so ,It is success. Then I select the ResultSet, The getString() mathod could not get the correct words. But if I use the sentence " String s =new String(rs.getBytes());" ,The string s is correct. I guess that is caused by char= 16-bit in java2. Now how can I insert the chinese words (local= zh_TW ,"BIG5") into the varchar column by jdbc? regard --------- OS: windows XP JavaVM: j2sdk 1.4.1 JDBC :JDBC3 pssql:PostgreSQL 7.3.1 ---Dauw dauw@ms9.url.com.tw
When I test this locally it works correctly for me. What character set is your database created in? (the output of the \l command in psql should tell you). If order for this to work correctly your database needs to be created in a character set that supports the characters you are trying to store. In your case that would be either UNICODE or BIG5. thanks, --Barry dauw wrote: > Hello all, > I use the "(2003-02-09) JDBC3 JDK 1.4" JDBC driver to access the DB. > When I insert the chinese words (local= zh_TW ,"BIG5") into the varchar > column,it become "???". > But if I use the pgAdmin to do so ,It is success. > > Then I select the ResultSet, The getString() mathod could not get the > correct words. > But if I use the sentence " String s =new String(rs.getBytes());" ,The > string s is correct. > > I guess that is caused by char= 16-bit in java2. > > Now how can I insert the chinese words (local= zh_TW ,"BIG5") into the > varchar column by jdbc? > > regard > > --------- > OS: windows XP > JavaVM: j2sdk 1.4.1 > JDBC :JDBC3 > pssql:PostgreSQL 7.3.1 > > ---Dauw > dauw@ms9.url.com.tw > > > ---------------------------(end of broadcast)--------------------------- > TIP 3: if posting/reading through Usenet, please send an appropriate > subscribe-nomail command to majordomo@postgresql.org so that your > message can get through to the mailing list cleanly >
Your email was some days ago. I don't know whether you have resolved this issue or not. I'm using the PostgreSQL with its JDBC driver (both 7.2.1 and 7.3 ) to store English and Chinese. Do you have the encoding set in the DB? If so, do you have the string encoded as the same as the one in DB? 18/02/2003 1:25:07 AM, dauw <dauw@ms9.url.com.tw> wrote: >Hello all, >I use the "(2003-02-09) JDBC3 JDK 1.4" JDBC driver to access the DB. >When I insert the chinese words (local= zh_TW ,"BIG5") into the varchar >column,it become "???". >But if I use the pgAdmin to do so ,It is success. > >Then I select the ResultSet, The getString() mathod could not get the >correct words. >But if I use the sentence " String s =new String(rs.getBytes());" ,The >string s is correct. > >I guess that is caused by char= 16-bit in java2. > >Now how can I insert the chinese words (local= zh_TW ,"BIG5") into the >varchar column by jdbc? > >regard > >--------- >OS: windows XP >JavaVM: j2sdk 1.4.1 >JDBC :JDBC3 >pssql:PostgreSQL 7.3.1 > > ---Dauw >dauw@ms9.url.com.tw > > >---------------------------(end of broadcast)--------------------------- >TIP 3: if posting/reading through Usenet, please send an appropriate >subscribe-nomail command to majordomo@postgresql.org so that your >message can get through to the mailing list cleanly >
On Tuesday 18 February 2003 01:25, dauw wrote: > Hello all, > I use the "(2003-02-09) JDBC3 JDK 1.4" JDBC driver to access the DB. > When I insert the chinese words (local= zh_TW ,"BIG5") into the varchar > column,it become "???". > But if I use the pgAdmin to do so ,It is success. > > Then I select the ResultSet, The getString() mathod could not get the > correct words. > But if I use the sentence " String s =new String(rs.getBytes());" ,The > string s is correct. > > I guess that is caused by char= 16-bit in java2. > > Now how can I insert the chinese words (local= zh_TW ,"BIG5") into the > varchar column by jdbc? I would imagine Big5 isn't any different from GB, so here goes: String str=new String( "中国" ) ; byte[] b=str.getBytes("iso-8859-1") ; str=new String( b, "gb2312" ) ; stmt.setString(1, str ) ; This is assuming you weren't treating the Chinese as Chinese, originally. And to get them back out: String str=rs.getString(1) ;