Cattive notizie. Ma prima, ricontrolla:
SELECT col, HEX(col)...
per vedere cosa c'è nella tabella. Se l'esagono mostra 3F
, quindi i dati sono spariti. Memorizzato correttamente, il dal
il carattere dovrebbe essere D8AF
esadecimale; hah
è D8AD
esadecimale .
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 farsi, quindi i punti interrogativi li hanno sostituiti.
La cura (per futuri `INSERT):
- Ricodifica la tua applicazione utilizzando l'interfaccia mysqli_* invece dell'interfaccia mysql_* deprecata.
- Dati con codifica utf8 (buono)
- mysqli_set_charset('utf8')
- 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.
Se vuoi che questi siano trattati allo stesso modo:'بِسْمِ' ='بسم', usa utf8_unicode_ci (invece di utf8_general_ci) per COLLATION
.