Che cosa è successo:
- avevi dati con codifica utf8 (buono)
SET NAMES latin1era in vigore (predefinito, ma errato)- la colonna è stata dichiarata
CHARACTER SET latin1(predefinito, ma sbagliato)
Come hai INSERTed i dati sono stati convertiti in latin1, che non ha valori per i caratteri arabi (curdi/farsi/ecc), quindi i punti interrogativi li hanno sostituiti.
La cura (per INSERTs futuri ):
- Dati con codifica utf8 (buono)
mysqli_set_charset('utf8')(o qualunque cosa il tuo cliente abbia bisogno per stabilire ilCHARACTER SET)- controlla che le colonne e/o le tabelle predefinite siano
CHARACTER SET utf8 - Se stai visualizzando su una pagina web,
<meta...utf8>dovrebbe essere vicino alla cima.
La discussione sopra riguarda CHARACTER SET , la codifica dei caratteri. Ora per un consiglio su COLLATION , utilizzato per confrontare e ordinare.
Per ricontrollare che i dati siano archiviati correttamente, faiSELECT col, HEX(col)... .هرچوون dovrebbe tornare D987E2808CD8B1DA86D988D988D986
I caratteri arabi in utf8 hanno esadecimale D8xx o D9xx.
(utf8mb4 funziona altrettanto bene come utf8; entrambi funzionano per l'arabo.)
Cattive notizie:i dati inseriti e trasformati in '???' non può essere recuperato.