Informix “Incompatibilidade de informações de localidade do banco de dados”

1

Eu tenho o informix 11.5 em execução na minha caixa Win-2003 e alguns bancos de dados em execução nele. Bancos de dados do sistema têm localidade en_us.819
Meus bancos de dados personalizados possuem o código de idioma en_us.57372 (UTF8).

Existe também uma aplicação implementada no JBoss 4.0.2, que possui poucas fontes de dados configuradas para esses bancos de dados personalizados.

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

Estou logado como Administrador e quando eu inicio o JBoss, o seguinte erro é mostrado

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 e CLIENT_LOCALE estão definidos como en_us.utf8 para administrador.

Quando configuro no Server Studio DB_LOCALE e CLIENT_LOCALE para en_us.utf8, posso conectar meus bancos de dados.

Onde devo definir DB_LOCALE e CLIENT_LOCALE para evitar esse erro de Incompatibilidade de informações de localidade do banco de dados ?

Obrigado.

    
por lmmortal 23.11.2010 / 17:59

2 respostas

4

De acordo com as respostas de comentários # 5 e # 11 de Guy Bowerman em seu blog

...you'll need to set it in your environment prior to executing the oninit command to start the server (on UNIX). If the server is on Windows, you can also set the variable in the registry under: HKEY_LOCAL_MACHINE\Software\Informix\Online\%INFORMIXSERVER%\Environment

A correção é alterar ambos CLIENT_LOCALE do padrão "EN_US.CP1252" e DB_LOCALE do padrão "EN_US.8859-1" para "EN_US.UTF8" no registro.

    
por 30.12.2010 / 12:06
1

Você pode definir DB_LOCALE e CLIENT_LOCALE na URL do banco de dados JDBC. Dê uma olhada no meu código Jython em: link . Lá para locale polonês eu uso URL como:

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
    
por 29.11.2010 / 13:20