Wat is er gebeurd:
- u had utf8-gecodeerde gegevens (goed)
SET NAMES latin1
was van kracht (standaard, maar verkeerd)- de kolom is verklaard
CHARACTER SET latin1
(standaard, maar fout)
Zoals je INSERTed
de gegevens zijn geconverteerd naar latin1, die geen waarden heeft voor Arabische (Koerdische/Farsi/etc) tekens, dus vraagtekens hebben ze vervangen.
De remedie (voor toekomstige INSERTs
):
- utf8-gecodeerde gegevens (goed)
mysqli_set_charset('utf8')
(of wat uw klant ook nodig heeft voor het maken van deCHARACTER SET
)- controleer of de standaardkolom(men) en/of tabel
CHARACTER SET utf8
zijn - Als u op een webpagina weergeeft,
<meta...utf8>
zou bovenaan moeten staan.
De bovenstaande discussie gaat over CHARACTER SET
, de codering van tekens. Nu voor een tip over COLLATION
, die wordt gebruikt voor het vergelijken en sorteren.
Om te controleren of de gegevens correct zijn opgeslagen, doet u SELECT col, HEX(col)...
.هرچوون
moet terugkomen D987E2808CD8B1DA86D988D988D986
Arabische tekens in utf8 hebben de hexadecimale waarde van D8xx of D9xx.
(utf8mb4
werkt net zo goed als utf8
; beide werken voor Arabisch.)
Slecht nieuws:de gegevens die zijn ingevoerd en omgezet in '???' kan niet worden hersteld.