Znaki zapytania pochodzą z tego:
- Klient ma poprawny znak (dobry) i
SET NAMES
zgadza się z kodowaniem klienta (dobrze), aleCHARACTER SET
kolumny docelowej nie zawiera zamierzonego znaku (zły).
Przykłady:
latin1
obsługuje tylko znaki zachodnioeuropejskie; próba umieszczenia znaku wschodnioeuropejskiego lub innego znaku azjatyckiego nie pasuje.latin2
icp1250
może obsługiwać język czeski, więc konwersje między nimi są w większości OK, ale nie między żadnym z nich alatin1
utf8mb4
jest nadzbioremutf8
.Wstawienie znaku utf8 do utf8mb4 jest w porządku, ale odwrotność spowoduje powstanie znaku '?' w niektórych przypadkach.
Znaki, które zostały przekonwertowane na „?” nie można odzyskać ze stołu.
Jak naprawić przyszłe INSERTs
?
- Korzystanie z
utf8mb4
na kolumnach tabeli prawdopodobnie działa we wszystkich przypadkach. - W przeciwnym razie wybierz
CHARACTER SET
dla kolumn tabeli, które rozsądnie pasują do danych klienta.
Powód, dla którego tylko niektóre znaki są ?
(w š?ž??
) jest ponieważ šž
istnieją w latin1, ale inne nie.
Konkluzja:Zmień CHARACTER SET
w definicji tabeli.