2012-06-15 12 views
5

Sono consapevole che questo errore indica che una colonna mysql non accetta il valore, ma questo è strano, poiché il valore si adatta a una stringa codificata UTF-8 Java e la colonna mysql è utf8_general_ci. Inoltre, tutti i personaggi di utf8 hanno funzionato correttamente finora, a parte questi.Come gestire lo stato SQL [HY000]; codice di errore [1366]; Valore stringa errato?

Il caso d'uso è: sto importando tweet. Il tweet in questione è: https://twitter.com/bakervin/status/210054214951518212 - puoi vedere i due personaggi "strani" (e due strani spazi bianchi tra di loro). La domanda è - come gestire questo:

  • tagliare questi personaggi (come - che sono, come fa il Java UTF-8 differiscono da MySQL uno)
  • rendono la colonna in grado di accettare questo valore (come - c'è qualcosa di più utf-y di utf8_general_ci)

risposta

9

Questi sembrano essere unicode surrogate characters. Dal momento che non sono personaggi reali, e sembra che MySQL non li supporti, è sicuro tagliarli:

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(); 
Problemi correlati