Въпросителните знаци идват от това:
- Клиентът има валиден знак (добър) и
SET NAMES
съгласява се с кодирането, което клиентът има (добро), ноCHARACTER SET
на целевата колона не включва предвидения знак (лош).
Примери:
latin1
обработва само западноевропейски знаци; опитвайки се да поставите източноевропейски символ или азиатски символ в него няма да пасне.latin2
иcp1250
може да се справи с чешки, така че преобразуванията между тях са предимно ОК, но не и между нито един от тях иlatin1
utf8mb4
е надмножество наutf8
.Поставянето на символ utf8 в utf8mb4 е добре, но обратното ще доведе до '?' в някои случаи.
Знаците, които са били преобразувани в "?" не може да бъде възстановен от таблицата.
Как да коригирам бъдещи INSERTs
?
- Използване на
utf8mb4
в колоните на таблицата вероятно работи във всички случаи. - В противен случай изберете някакъв
CHARACTER SET
за колоната(ите) на таблицата, която разумно съответства на клиентските данни.
Причината само някои от знаците са ?
(в š?ž??
) е защото šž
съществуват в latin1, но останалите не.
Долен ред:Променете CHARACTER SET
в дефиницията на таблицата.