Windows-Server-2003

Informix“數據庫語言環境資訊不匹配”

  • December 30, 2010

我的 Win-2003 機器中執行著 informix 11.5,其中執行著一些數據庫。

系統數據庫的語言環境為 en_us.819

我的自定義數據庫的語言環境為 en_us.57372 (UTF8)。

還有一個應用程序部署到 JBoss 4.0.2,它為這些自定義數據庫配置了很少的數據源。

<local-tx-datasource>
<jndi-name>InformixDS</jndi-name>
<connection-url>jdbc:informix-sqli://@database.server@:@database.port@/tcs_catalog:INFORMIXSERVER=@database.INFORMIXSERVER@</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>

我以管理員身份登錄,當我啟動 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

DB_LOCALE 和 CLIENT_LOCALE 設置為管理員的 en_us.utf8。

當我在 Server Studio DB_LOCALE 和 CLIENT_LOCALE 中設置為 en_us.utf8 時,我可以連接我的數據庫。

我應該在哪裡設置 DB_LOCALE 和 CLIENT_LOCALE 以避免此數據庫區域設置資訊不匹配錯誤?

謝謝。

根據 Guy Bowerman 在他的部落格上的評論回复 #5 和 #11

…在執行 oninit 命令啟動伺服器(在 UNIX 上)之前,您需要在您的環境中設置它。如果伺服器在 Windows 上,您還可以在系統資料庫中設置變數:HKEY_LOCAL_MACHINE\Software\Informix\Online%INFORMIXSERVER%\Environment

修復方法是系統資料庫中將 CLIENT_LOCALE 從預設的“EN_US.CP1252”和 DB_LOCALE 從預設的“EN_US.8859-1”更改為“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

引用自:https://serverfault.com/questions/205216