2012-06-15 9 views
5

Ich bin mir bewusst, dass dieser Fehler bedeutet, dass eine mysql-Spalte den Wert nicht akzeptiert, aber das ist seltsam, da der Wert in eine Java UTF-8-codierte Zeichenfolge passt und die Spalte mysql utf8_general_ci ist. Auch alle utf8 Charaktere haben bis jetzt einwandfrei funktioniert, abgesehen von diesen.Wie mit dem SQL-Status [HY000] umzugehen ist; Fehlercode [1366]; Falscher Stringwert?

Der Anwendungsfall ist: Ich importiere Tweets. Der fragliche Tweet ist: https://twitter.com/bakervin/status/210054214951518212 - Sie können die zwei "merkwürdigen" Zeichen (und zwei merkwürdige whitespaces zwischen ihnen) sehen. Die Frage ist - wie das zu handhaben:

  • trimmen diese Zeichen (wie - das sind sie, wie funktioniert die Java UTF-8 unterscheiden sich von MySQL ein)
  • die Säule der Annahme dieser Wert fähig machen (wie - Gibt es etwas utf-y als utf8_general_ci)

Antwort

9

Diese scheinen unicode surrogate characters zu sein. Da es sich nicht um tatsächliche Zeichen handelt und es scheint, dass MySQL sie nicht unterstützt, ist es sicher, sie zu schneiden:

StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < text.length(); i++) { 
    char ch = text.charAt(i); 
    if (!Character.isHighSurrogate(ch) && !Character.isLowSurrogate(ch)) { 
     sb.append(ch); 
    } 
} 
return sb.toString(); 
Verwandte Themen