diff --git a/CLAUDE.md b/CLAUDE.md index 558a772a..23924ed1 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -219,6 +219,8 @@ Utiliser `min()`, `clamp()`, `vw`/`vh`. Éviter les largeurs fixes en `px` sur l | Chaîne comparée à une fonction SQL | `DATE_FORMAT(col, …) = ?` avec les préparées natives (`EMULATE_PREPARES=false`) : sur la MariaDB d'Hostinger (`skip-character-set-client-handshake`), le paramètre lié est en `utf8mb4_general_ci` et la chaîne produite en `utf8mb4_unicode_ci` → `Illegal mix of collations` → **500**. Vécu en 2.2.6 (`GET /api/titles` pour tous, 30 min). Comparer des **entiers** (`MONTH()`, `DAY()`, `MONTH()*100+DAY()`) ou des dates, jamais des chaînes formatées. Et toute boucle serveur sur des conditions (réconciliation) enveloppe chaque vérification : une condition qui plante est loguée et sautée, pas propagée | | La préprod « marche » mais pas la prod | Une préprod ne vaut que si elle reproduit **exactement** la prod : même MariaDB (11.8, `collation_server=utf8mb4_unicode_ci`, `skip-character-set-client-handshake`), même PHP (**8.2**, pas 8.3 — le client MySQL ne négocie pas la même collation), même dump. Les trois écarts ont masqué le bug ci-dessus. Config : `ARG PHP_VERSION=8.2` dans `docker/php/Dockerfile`, override MariaDB dans le dépôt privé `personadle-discord/ops/preprod/`. Avant de dire « ça passe en préprod », vérifier `php -v` et `SELECT @@collation_connection` dedans | | Bouton rond/carré rendu ovale | `css/global.css` §18 impose `min-height: 48px; padding: 12px 20px` à **tout** `