Am date murdare. Uneori conține caractere de genul acesta. Folosesc aceste date pentru a face interogări precum

Pentru acest personaj obțin

org.hibernate.exception.GenericJDBCException: Mix ilegal de colațiuni (utf8_bin, IMPLICIT), (utf8mb4_general_ci, COERCIBLE), (utf8mb4_general_ci, COERCIBLE) pentru operația „IN”

Cum pot filtra personaje de genul acesta? Folosesc Java.

rele

6 Răspunsuri 6

Când am avut o astfel de problemă, am folosit scriptul Perl pentru a mă asigura că datele sunt convertite în UTF-8 valid folosind un cod de genul acesta:

Acest script preia (posibil corupt) UTF-8 pe stdin și reimprimă UTF-8 valid pe stdout. Caracterele nevalide sunt înlocuite cu (U + FFFD, caracter de înlocuire Unicode).

Dacă rulați acest script pe o intrare UTF-8 bună, ieșirea ar trebui să fie identică cu intrarea.

Dacă aveți date în baza de date, este logic să utilizați DBI pentru a vă scana tabelul (tabelele) și pentru a curăța toate datele folosind această abordare pentru a vă asigura că totul este valid UTF-8.

Aceasta este o versiune Perl one-liner a aceluiași script:

EDIT: S-a adăugat o soluție numai Java.