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&useUnicode=true&characterEncoding=utf8&useOldUTF8Behavior=true</value> </property>