Znaki zapytania pochodzą z tego:
- Klient ma poprawny znak (dobry) i
SET NAMESzgadza się z kodowaniem klienta (dobrze), aleCHARACTER SETkolumny docelowej nie zawiera zamierzonego znaku (zły).
Przykłady:
latin1obsługuje tylko znaki zachodnioeuropejskie; próba umieszczenia znaku wschodnioeuropejskiego lub innego znaku azjatyckiego nie pasuje.latin2icp1250moż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 alatin1utf8mb4jest 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
utf8mb4na kolumnach tabeli prawdopodobnie działa we wszystkich przypadkach. - W przeciwnym razie wybierz
CHARACTER SETdla 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.