Назад | Перейти на главную страницу

Informix «Несоответствие информации о локали базы данных»

У меня в 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, чтобы этого избежать Несоответствие информации о локали базы данных ошибка?

Спасибо.

Согласно комментариям # 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» в реестре.

Вы можете установить DB_LOCALE и CLIENT_LOCALE в URL-адресе базы данных JDBC. Взгляните на мой код 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