Dåliga nyheter. Men först, dubbelkolla:
SELECT col, HEX(col)...
för att se vad som står i tabellen. Om hex visar 3F
, då är data borta. Korrekt lagrad, dal
tecknet ska vara hex D8AF
; hah
är hex D8AD
.
Vad hände:
- du hade utf8-kodad data (bra)
SET NAMES latin1
var i kraft (standard, men fel)- kolumnen deklarerades
CHARACTER SET latin1
(standard, men fel)
Som du INSERTed
informationen konverterades till latin1, som inte har värden för farsi-tecken, så frågetecken ersatte dem.
Botemedlet (för framtida `INSERTs):
- Koda om din applikation med mysqli_*-gränssnittet istället för det utfasade mysql_*-gränssnittet.
- utf8-kodad data (bra)
- mysqli_set_charset('utf8')
- kontrollera att kolumn(erna) och/eller tabellstandard är
CHARACTER SET utf8
- Om du visar på en webbsida,
<meta...utf8>
bör vara nära toppen.
Diskussionen ovan handlar om CHARACTER SET
, kodning av tecken. Nu till ett tips om COLLATION
, som används för att jämföra och sortera.
Om du vill att dessa ska behandlas lika:'بِسْمِ' ='بسم', använd sedan utf8_unicode_ci (istället för utf8_general_ci) för COLLATION
.