我有我的Win-2003框中运行的informix 11.5和less数运行在其中的数据库。
系统数据库的语言环境为en_us.819
我的自定义数据库的区域设置为en_us.57372(UTF8)。
还有部署到JBoss 4.0.2的应用程序,这些自定义数据库configuration的数据源很less。
<local-tx-datasource> <jndi-name>InformixDS</jndi-name> <connection-url>jdbc:informix-sqli://@database.server@:@database.port@/tcs_catalog:[email protected]@</connection-url> <driver-class>com.informix.jdbc.IfxDriver</driver-class> <user-name>@database.username@</user-name> <password>@database.password@</password> <new-connection-sql>set lock mode to wait 5</new-connection-sql> <check-valid-connection-sql>select '1' from dual</check-valid-connection-sql> <metadata> <type-mapping>InformixDB</type-mapping> </metadata>
我以pipe理员身份login,当我启动JBoss时,显示以下错误
Caused by: java.sql.SQLException: Database locale information mismatch. at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373) at com.informix.jdbc.IfxSqli.a(IfxSqli.java:3208) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3518) at com.informix.jdbc.IfxSqli.dispatchMsg(IfxSqli.java:2353) at com.informix.jdbc.IfxSqli.receiveMessage(IfxSqli.java:2269) at com.informix.jdbc.IfxSqli.executeOpenDatabase(IfxSqli.java:1786) at com.informix.jdbc.IfxSqliConnect.<init>(IfxSqliConnect.java:1327) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) at java.lang.reflect.Constructor.newInstance(Constructor.java:501) at com.informix.jdbc.IfxDriver.connect(IfxDriver.java:254) at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:151) ... 160 more Caused by: java.sql.SQLException at com.informix.util.IfxErrMsg.getSQLException(IfxErrMsg.java:373) at com.informix.jdbc.IfxSqli.E(IfxSqli.java:3523) ... 170 more
对于pipe理员,DB_LOCALE和CLIENT_LOCALE被设置为en_us.utf8。
当我在Server Studio DB_LOCALE和CLIENT_LOCALE中设置为en_us.utf8时,我可以连接我的数据库。
我应该在哪里设置DB_LOCALE和CLIENT_LOCALE以避免此数据库区域设置信息不匹配错误?
谢谢。
根据盖博尔曼在他的博客评论回应#5和#11
…在执行oninit命令启动服务器(在UNIX上)之前,您需要将其设置在您的环境中。 如果服务器在Windows上,也可以在registry下的以下位置设置variables:HKEY_LOCAL_MACHINE \ Software \ Informix \ Online \%INFORMIXSERVER%\ Environment
修复方法是将registry中的默认“EN_US.CP1252”的CLIENT_LOCALE和默认的“EN_US.8859-1”的DB_LOCALE更改为“EN_US.UTF8”。
您可以在JDBC数据库url中设置DB_LOCALE和CLIENT_LOCALE。 看看我的Jython代码: https : //stackoverflow.com/questions/464567/how-to-get-trailing-spaces-from-varchar-column-in-informix-using-odbc 。 在波兰语言环境中,我使用的URL如下所示:
jdbc:informix-sqli://127:0:0:1:9088/test_td:informixserver=ol_mn;DB_LOCALE=pl_PL.CP1250;CLIENT_LOCALE=pl_PL.CP1250;charSet=CP1250