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 arabiska (kurdiska/farsi/etc) tecken, så frågetecken ersatte dem.
Botemedlet (för framtida INSERTed
):
- utf8-kodad data (bra)
mysqli_set_charset('utf8')
(eller vad som helst som din klient behöver för att upprättaCHARACTER SET
)- 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.
För att dubbelkontrollera att data lagras korrekt, gör duSELECT col, HEX(col)...
.هرچوون
bör komma tillbaka D987E2808CD8B1DA86D988D988D986
Arabiska tecken i utf8 har hex av D8xx eller D9xx.
(utf8mb4
fungerar lika bra som utf8
; antingen fungerar för arabiska.)
Dåliga nyheter:Datan som infogades och förvandlades till '???' kan inte återställas.