Dårlige nyheder. Men først, dobbelttjek:
SELECT col, HEX(col)...
for at se, hvad der står i tabellen. Hvis hex viser 3F
, så er dataene væk. Korrekt gemt, dal
karakter skal være hex D8AF
; hah
er hex D8AD
.
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 farsi-tegn, så spørgsmålstegn erstattede dem.
Kuren (for fremtidige `INDSÆTNINGER):
- Omkod din applikation ved hjælp af mysqli_*-grænsefladen i stedet for den forældede mysql_*-grænseflade.
- utf8-kodede data (godt)
- mysqli_set_charset('utf8')
- 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.
Hvis du ønsker at disse skal behandles ens:'بِسْمِ' ='بسم', så brug utf8_unicode_ci (i stedet for utf8_general_ci) til COLLATION
.