web-dev-qa-db-ja.com

Informix「データベースロケール情報の不一致」

Win-2003ボックスでinformix11.5を実行していて、いくつかのデータベースを実行しています。
システムデータベースにはロケールen_us.819があります
カスタムデータベースのロケールはen_us.57372(UTF8)です。

これらのカスタムデータベース用に設定されたデータソースがほとんどないJBoss4.0.2にデプロイされたアプリケーションもあります。

<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>

管理者としてログインしていますが、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をどこに設定する必要がありますかデータベースロケール情報の不一致エラー?

ありがとう。

1
lmmortal

コメントによると、Guy Bowermanによる彼の ブログ での回答#5と#11

...サーバーを起動するためにoninitコマンドを実行する前に、環境に設定する必要があります(UNIXの場合)。サーバーがWindows上にある場合は、レジストリーのHKEY_LOCAL_MACHINE\Software\Informix\Online \%INFORMIXSERVER%\ Environmentで変数を設定することもできます。

修正は、bothCLIENT_LOCALEをデフォルトの「EN_US.CP1252」に変更し、DB_LOCALEをデフォルトの「EN_US.8859-1」から「EN_US.UTF8」に変更することです。 「レジストリ内。

4
Saheed

DB_LOCALEとCLIENT_LOCALEはJDBCデータベースのURLで設定できます。私の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
1
Michał Niklas