Encodage des bases de données

De par leurs fonctionnalités et leurs objectifs d'interropérabilité, les modules ORI-OAI sont voués à fonctionner dans un encodage UTF-8. Il est préférable (pour éviter au mieux les problèmes d'encodage dans les données, le rendu etc.) de positionner l'encodage à UTF-8 pour tous les composants acteurs dans ORI-OAI (les bases de données, les serveurs d'applciation, etc). Cela peut se faire de différentes manières (depuis les variables d'environnement du système par exemple [LANG]).

Le positionner en tant qu'option Tomcat est également préférable:

CATALINA_OPTS=-Dfile.encoding=UTF-8

Encodage et MySQL

Côté MySQL

Pour MySQL, le plus simple est de configurer l'UTF-8 à la fois au niveau des "Connection Character Sets" et des "Collations".
Pour ce faire, on ajoute dans la configuration de mysql (sous debian /etc/mysql/my.cnf) la confiuration suivante (après [mysqld] au même niveau que default-storage_engine = innodb :

character-set-server=utf8
collation-server=utf8_general_ci

On notera qu'après une telle modification il faut redémarrer le serveur mysql.


On peut ensuite vérifier la bonne prise en compte de ces variables :

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | utf8_general_ci   |
| collation_server     | utf8_general_ci   |
+----------------------+-------------------+
3 rows in set (0.00 sec)
Côté client Hibernate

Si comme indiqué au dessus, on a positionné à la fois les collation et les character set à utf-8, cette configuration côté Hibernate n'est a priori pas nécessaire.

Ici on force Hibernate à demander un dialogue UTF-8 avec la base de données, cela en ajoutant dans les paramètres de connection

  • useUnicode=true
  • characterEncoding=utf8
  • useOldUTF8Behavior=true

Pour ori-oai-workflow, dans conf/properties/spring/common/dao/dao.xml
On mettra à la place de

<property name="url">
  <value>${hibernate.connection.url}?emulateLocators=true</value>
</property>

cela :

<property name="url">
 <value>${hibernate.connection.url}?emulateLocators=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;useOldUTF8Behavior=true</value>
</property>
  • No labels