Hvad skete der:
- du havde utf8-kodede data (godt)
SET NAMES latin1
var i kraft (standard, men forkert)- kolonnen blev erklæret
CHARACTER SET latin1
(standard, men forkert)
Som du INSERTed
dataene blev de konverteret til latin1, som ikke har værdier for arabiske (kurdiske/farsi/osv) tegn, så spørgsmålstegn erstattede dem.
Kuren (til fremtidige INSERTs
):
- utf8-kodede data (godt)
mysqli_set_charset('utf8')
(eller hvad din klient har brug for for at etablereCHARACTER SET
)- tjek, at kolonnen(erne) og/eller tabellens standard er
CHARACTER SET utf8
- Hvis du viser på en webside,
<meta...utf8>
skal være tæt på toppen.
Diskussionen ovenfor handler om CHARACTER SET
, indkodning af tegn. Nu til et tip om COLLATION
, som bruges til at sammenligne og sortere.
For at dobbelttjekke, at dataene er lagret korrekt, skal duSELECT col, HEX(col)...
.هرچوون
skulle komme tilbage D987E2808CD8B1DA86D988D988D986
Arabiske tegn i utf8 har hex på D8xx eller D9xx.
(utf8mb4
fungerer lige så godt som utf8
; virker enten til arabisk.)
Dårlige nyheder:De data, der blev indsat og omdannet til '???' kan ikke gendannes.