2012-06-15 82 views
5

我知道這個錯誤意味着一個mysql列不接受該值,但這很奇怪,因爲該值適合Java UTF-8編碼的字符串,並且mysql列是utf8_general_ci。另外,除了這些之外,所有的utf8字符都能正常工作。如何處理SQL狀態[HY000];錯誤代碼[1366];不正確的字符串值?

用例是:我正在導入推文。有問題的推文是:https://twitter.com/bakervin/status/210054214951518212 - 您可以看到兩個「奇怪」的字符(以及它們之間的兩個奇怪的空格)。現在的問題是 - 如何處理此:

  • 修剪這些字符(如何 - 這是他們,如何在Java UTF-8從MySQL一個不同)
  • 使能夠接受該值的柱(如何 - 是否還有比utf8_general_ci更多的utf-y)

回答

9

這些似乎是unicode surrogate characters。由於它們不是真正的字符,並且MySQL似乎不支持它們,所以修剪它們是安全的:

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(); 
相關問題