Ce qui se passe, c'est que le client JDBC envoie l'identifiant du fuseau horaire au serveur. Le serveur a besoin de connaître ce fuseau. Vous pouvez vérifier avec
SELECT DISTINCT tzname FROM V$TIMEZONE_NAMES where tzname like 'Etc%';
J'ai des serveurs de base de données qui connaissent 'Etc/UTC' et 'UTC' (version du fichier de fuseau horaire 18) mais d'autres ne connaissent que 'UTC' (version du fichier de fuseau horaire 11).
SELECT FILENAME,VERSION from V$TIMEZONE_FILE;
Il y a également un comportement différent du côté du client JDBC. À partir de 11.2, le pilote enverra les identifiants de zone s'ils sont "connus" d'Oracle, tandis qu'auparavant, il envoyait le décalage horaire. Le problème avec cette "envoi des ID connus" est que le client ne vérifie pas quelle version/de contenu de fuseau horaire est présente sur le serveur mais a sa propre liste.
Ceci est expliqué dans l'article du support Oracle [ID 1068063.1].
Il semble aussi que cela dépende du système d'exploitation du client, il était plus probable que Etc/UTC échoue avec Ubuntu qu'avec RHEL ou Windows. Je suppose que cela est dû à une certaine normalisation mais je n'ai pas encore compris exactement pourquoi.
0 votes
Parlez-nous de votre environnement, comment exécutez-vous votre Java ?
0 votes
Je lance l'application Java en ligne de commande. Windows 7 64bit, mais la base de données Oracle est en cours d'exécution sur un serveur Unix distant.
9 votes
Essayez d'ajouter "-Duser.timezone="à votre commande, n'oubliez pas de remplacer par votre GMT, c'est-à-dire -Duser.timezone="+05:30"