Il problema è il supporto penoso di PHP con le stringhe multibyte. È stato in parte risolto con l'introduzione della libreria mbstring.
A differenza dei caratteri "normali", PHP memorizza i caratteri multibyte (ad es. lettere accentate) con due byte, per questo motivo dovresti sempre utilizzare la controparte mb_* delle funzioni per gestire stringhe.
Dai un'occhiata a questa guida, nell'esempio della funzione strlen() https://guidaphp.it/base/funzioni/stringhe
A livello di database devi fare la stessa cosa, ossia cambiare la codifica in utf8mb4 (dimenticati di latin_swedish) che ormai è diventato lo standard per gestire caratteri Unicode.
Ricordati che la connessione al DB deve avvenire anch'essa in utf8, altrimenti i dati contenenti caratteri speciali non verranno salvati/prelevati correttamente.
E anche nell'HTML dovrai utilizzare il metatag charset
codice HTML:<meta charset="utf-8">
Riassumento devi gestire la codifica dei caratteri ad ogni livello:
- PHP
- Database
- HTML