Concernant la version MySQL
Bon, de mon côté, j’ai vérifié, j’ai bien une version >8 de mysql sur mon environnement de travail. Ca ne marche pas, mais au moins il y a la certitude que ça devrait marcher.
Par contre, je viens de vérifier mon hébergeur actuel (nuxit) qui est en version <7.4. De ce que je vois, OVH est en version 5.6 ou 8, mais ne les ayant pas encore contacté, je ne sais pas si on peut demander à être sur une version 8.
Du coup, si de toute façon mon hébergeur probable ne peut pas me garantir que je serai en 8, au final, cette prise de tête monumentale est peut-être - en plus - inutile ; à part bien sûr pour le plaisir de comprendre l’origine d’un problème et de le résoudre.
Concernant les étapes d’Ymox
Je mettrais volontiers les étapes 1 et 2 hors de cause vu que si je passe par l’interface API elles sont automatiquement zappées et que ça ne change rien. On voit également que les étapes 5/6/7 sont probablement aussi hors de cause puisque les données sont déjà fausses en BDD.
Restent les étapes 3 et 4.
Là, je suis passé en "datetime_timezone: 'UTC’" dans services.yaml (Symfony\Component\Serializer\Normalizer\DateTimeNormalizer:). J’ai bien vidé le cache, refait des tests, et le problème persiste : Doctrine entre en base de données des heures h-2 sans garder l’info "Z". J’entame des recherches plus approfondies sur la désérialisation via API Platform pour voir si il y aurait d’autres méthodes de test.
Pour l’étape 3, je ne suis pas sûr de bien comprendre ce que tu proposes : c’est en lien avec ce que dit SpaceFox dans la page précédente sur MySQL ?
D’ailleurs, SpaceFox, histoire que je fasse le test correctement : quand tu dis de tester l’insertion de « le 9 septembre 2021 à 21h03 UTC+2 », ce serait comment exactement, avec quel résultat attendu ?
EDIT : à propos de la conversion des données (fausses) actuellement stockées
A priori, la fonction convert_tz va me permettre de mettre à jour mes données sans tout perdre. Il va falloir que je regarde de près si l’information du changement d’heure en hiver peut se gérer intelligemment.
En tout cas, SELECT convert_tz(opening_time, '+00:00','+2:00') from opening_hours where activity_id = 36
me renvoie des heures correctes.
EDIT 2 : à propos de l’heure d’hiver
Histoire d’en avoir le coeur net, je viens de poster un horaire au 25 décembre - donc heure d’hiver en France - et je retrouve en BDD l’heure h-1, toujours en Time Zone +0200. Je ne sais pas si ça fait avancer le schmilblick, par contre