web-dev-qa-db-fra.com

le codage UTF8 ne correspond pas à l'environnement local en_US; le paramètre LC_CTYPE choisi nécessite le codage LATIN1

En essayant d'installer opennms:

/usr/share/opennms/bin/install -l /usr/local/lib -dis

Je reçois l'erreur:

ERREUR: le codage UTF8 ne correspond pas à l'environnement local en_US Détails: Le paramètre choisi pour LC_CTYPE nécessite le codage LATIN1.

et je ne suis pas sûr de savoir comment procéder car j'ai essayé de créer la base de données de différentes manières (voir ci-dessous).

Journal complet:

==============================================================================
OpenNMS Installer
==============================================================================

Configures PostgreSQL tables, users, and other miscellaneous settings.

- searching for jicmp:
  - trying to load /usr/local/lib/libjicmp.so: NO
  - trying to load /usr/lib/jni/libjicmp.so: OK
- searching for jicmp6:
  - trying to load /usr/local/lib/libjicmp6.so: NO
  - trying to load /usr/lib/jni/libjicmp6.so: OK
- searching for jrrd:
  - trying to load /usr/local/lib/libjrrd.so: NO
  - trying to load /usr/lib/jni/libjrrd.so: NO
  - trying to load /usr/lib/jni/libjrrd.so: NO
  - trying to load /usr/lib/jvm/jdk1.6.0_34/jre/lib/AMD64/server/libjrrd.so: NO
  - trying to load /usr/lib/jvm/jdk1.6.0_34/jre/lib/AMD64/libjrrd.so: NO
  - trying to load /usr/lib/jvm/jdk1.6.0_34/jre/../lib/AMD64/libjrrd.so: NO
  - trying to load /libjrrd.so: NO
  - trying to load /usr/share/opennms/lib/libjrrd.so: NO
  - trying to load /usr/share/opennms/lib/linux64/libjrrd.so: NO
  - trying to load /usr/Java/packages/lib/AMD64/libjrrd.so: NO
  - trying to load /usr/lib64/libjrrd.so: NO
  - trying to load /lib64/libjrrd.so: NO
  - trying to load /lib/libjrrd.so: NO
  - trying to load /usr/lib/libjrrd.so: NO
  - trying to load /usr/lib/jni/libjrrd.so: NO
  - trying to load /usr/lib/libjrrd.so: NO
  - trying to load /usr/local/lib/libjrrd.so: NO
  - trying to load /opt/NMSjicmp/lib/32/libjrrd.so: NO
  - trying to load /opt/NMSjicmp/lib/64/libjrrd.so: NO
  - trying to load /opt/NMSjicmp6/lib/32/libjrrd.so: NO
  - trying to load /opt/NMSjicmp6/lib/64/libjrrd.so: NO
- Failed to load the optional jrrd library.
  - This error is not fatal, since jrrd is only required for optional features.
  - For more information, see http://www.opennms.org/index.php/jrrd
- using SQL directory... /usr/share/opennms/etc
- using create.sql... /usr/share/opennms/etc/create.sql
* using 'postgres' as the PostgreSQL user for OpenNMS
* using 'opennms' as the PostgreSQL database name for OpenNMS
Exception in thread "main" org.opennms.core.schema.MigrationException: an error occurred creating the OpenNMS database
    at org.opennms.core.schema.Migrator.createDatabase(Migrator.Java:428)
    at org.opennms.core.schema.Migrator.prepareDatabase(Migrator.Java:444)
    at org.opennms.install.Installer.install(Installer.Java:236)
    at org.opennms.install.Installer.main(Installer.Java:949)
Caused by: org.postgresql.util.PSQLException: ERROR: encoding UTF8 does not match locale en_US
  Detail: The chosen LC_CTYPE setting requires encoding LATIN1.
    at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.Java:2102)
    at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.Java:1835)
    at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.Java:257)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.Java:500)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.Java:374)
    at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.Java:366)
    at org.opennms.core.schema.Migrator.createDatabase(Migrator.Java:425)
    ... 3 more

Liste des bases de données:

   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | LATIN1   | en_US   | en_US | 
 rhq       | rhqadmin | LATIN1   | en_US   | en_US | 
 template0 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | LATIN1   | en_US   | en_US | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
(4 rows)

J'ai utilisé les 3 options initdb suivantes mais aucune d'entre elles ne fonctionne

/usr/local/pgsql/bin/initdb -E UTF-8 --pgdata=/usr/local/pgsql/data

/usr/local/pgsql/bin/initdb -E LATIN1 --pgdata=/usr/local/pgsql/data

/usr/local/pgsql/bin/initdb -E en_US.UTF8  --pgdata=/usr/local/pgsql/data

Aussi, dois-je supprimer toutes les données dans /usr/local/pgsql/data avant d'utiliser initdb?

ajout de la commande locale locale stdout:

$ locale

LANG=en_US
LANGUAGE=en_US:
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=
45
kamal

Merci pour la sortie locale. OpenNMS semble utiliser vos paramètres régionaux en_US (non UTF-8) pour créer la base de données Postgres, ce qui est faux. Cela devrait fonctionner:

export LANG=en_US.UTF-8
locale   # confirm that it shows only en_US.UTF-8 for all settings
# finally, run your opennms installer
/usr/share/opennms/bin/install -l /usr/local/lib -dis
13
mvp

Je réponds à cela parce que rien de StackOverFlow n'a fonctionné pour moi.

J'ai combiné deux solutions d'autres sites qui ont fait le travail (cette réponse fonctionne pour le serveur Ubuntu 12.04 et PGSQL 9.1):

Créer un fichier:

nano /etc/profile.d/lang.sh

Ajouter ce qui suit

export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

Sauvegarde le

Redémarrez Shell ou exécutez toutes les commandes d'exportation manuellement dans l'instance Shell actuelle.

Reconfigurer pour que le codage soit au format UTF8 ([obtenu de là] [1])

Sudo su postgres

psql

update pg_database set datistemplate=false where datname='template1';
drop database Template1;
create database template1 with owner=postgres encoding='UTF-8'

  lc_collate='en_US.utf8' lc_ctype='en_US.utf8' template template0;

update pg_database set datistemplate=true where datname='template1';

Utilisez template1 pour créer une base de données.

J'espère que ça aide ;)

98
Avia

Cela se produit parce que votre système est configuré pour utiliser le codage Latin1 au lieu de UTF-8. Votre langue est correctement définie sur en_US, mais le codage n'est pas défini sur UTF-8. Essayez de lancer ceci: $ 

localedef -v -c -i en_US -f UTF-8 en_US.UTF-8

Cela indiquera à toutes vos applications installées après le changement (je pense) d’utiliser la langue anglaise avec le codage Unicode. Plus d'informations peuvent être trouvées ici: https://www.linux.com/learn/docs/ldp/790-Unicode-HOWTO#s3

J'ai eu un problème similaire alors j'ai:

  1. aptitude purge postresql ...
  2. localedef -v -c -i en_US -f UTF-8 en_US.UTF-8
  3. aptitude install postresql ....

et puis postregsql a su se configurer pour utiliser la langue anglaise avec le codage Unicode.

Bien sûr, vous pouvez le faire par base de données, comme décrit ici: http://www.postgresql.org/docs/9.1/static/multibyte.html

5
Tomasz Iniewicz

cela a fonctionné pour moi:

CREATE DATABASE mydb WITH ENCODING='UTF8' LC_CTYPE='en_US.UTF-8' LC_COLLATE='en_US.UTF-8' OWNER=postgres TEMPLATE=template0 CONNECTION LIMIT=-1;
4
psychok7

Modifiez les paramètres régionaux et les langues de SO pour assurer la compatibilité avec BD.

dpkg-reconfigure les locales

prendre plaisir!

1
Igor Palácio

Je rencontre l'erreur similaire. L'ancienne base de données LC_CTYPE est UTF-8, mais la nouvelle est en_US.UTF-8, je résous le problème après la réinitialisation de la base de données.

initdb --pgdata=/path/to/postgresql -E utf8

Vous devriez choisir le bon paramètre -E

0
jadeydi

J'ai eu le "même problème" lors de l'installation de odoo. Il s'avère qu'avant d'installer odoo, vous devez configurer les paramètres régionaux 

export LC_CTYPE="en_US.UTF-8"
Sudo dpkg-reconfigure locales

Et puis, configurez les paramètres régionaux avec UTF-8 MAIS vous devez configurer les paramètres régionaux avant l’installation de posgres.

0
Taras Vaskiv