記一次sybase12.5 之com.sybase.jdbc3.jdbc.SybSQLException

qqmengxue發表於2010-03-28

昨天做多資料庫相容性測試是,在使用sybase資料庫時候發現:

Caused by: com.sybase.jdbc3.jdbc.SybSQLException: Error converting characters into server's character set. Some

character(s) could not be converted.

 at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
 at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
 at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
 at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
 at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
 at com.sybase.jdbc3.jdbc.SybStatement.updateLoop(Unknown Source)
 at com.sybase.jdbc3.jdbc.SybStatement.executeUpdate(Unknown Source)
 at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeUpdate(Unknown Source)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
 at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
 at $java.sql.ParameterMetaData$$EnhancerByProxool$$572a21b0.executeUpdate()
 at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java:23)
 at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2247)
 ... 30 more

後分析發現SYBASE資料庫的字符集是CP960,而且sybase裡面也只安裝了這一種字符集,所以首先裝utf8字符集:

安裝:

cmd
cd d:\sybase\charsets\utf8
charset -Usa -Psa_pass -Sserver_name binary.srt utf8

修改:

   在sybase資料庫內設定選用此字符集為預設。

裝好之後檢視sp_configure,發現disable character set conversion為0也就是自動轉換字符集,將他設定為1,重新測試一切OK,

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10130206/viewspace-630568/,如需轉載,請註明出處,否則將追究法律責任。

相關文章