Che cosa è successo:
- avevi dati con codifica utf8 (buono)
SET NAMES latin1
era 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.