Пытался еще потестить, но не получается воспроизвести вашу ошибку "Incorrect string value".
Уже много символов перепробовал и даже ломал их:
char z[16];
strcopy(z, sizeof(z), "😞"); // 4 bytes (f0 9f 98 9e)
char s[2];
strcopy(s, sizeof(s), z); // И s для INSERT/UPDATE (с Escape и без пробовал)
В итоге значение поля в таблице просто становится пустым без ошибок (кодировка utf8).
Тут не могут исправить ошибку, а я наоборот не могу её воспроизвести.
@Kruzya, почему запрещаешь 3-байт символы?
Судя по гуглу, mysql выделяет utf8 символам 3 байта и проблемы возникают только с 4 байтовыми.
[levelsranks.smx] [Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
Он не сможет исправить; символ битый, обрезанный.
Битый/обрезанный ты имеешь в виду как в примере выше, когда обрезан 4 байт символ? Если да, то обрезанный s (в примере) по прежнему остался 4 байтовым, но уже таким: f0 0 0 0. Может, видя эту нули, просто меняем символ (подправляя байты) на точку, считая его невалидным?
Дайте кто-нибудь запрос, который вызовет эту "Incorrect string value" ошибку.