2012-06-15 11 views
5

このエラーは、mysqlカラムが値を受け入れないことを意味しますが、値がJava UTF-8エンコードされた文字列に収まり、mysqlカラムがutf8_general_ciなので、これは奇妙です。また、utf8文字はこれまでとは別に、これまでのところ正しく動作しています。SQLステート[HY000]を処理する方法。エラーコード[1366]。不適切な文字列値ですか?

ユースケースは次のとおりです。ツイートをインポートしています。問題のつぶやきは:https://twitter.com/bakervin/status/210054214951518212です - あなたは2つの "奇妙な"文字(そしてそれらの間に2つの奇妙な空白があります)を見ることができます。 (どのよう

  • がこの値を受け入れる列ができる作る - (彼らは、のJava UTF-8は、MySQL 1との違いはどのようであるか)これらの文字をトリミング

    • :これをどのように扱うか - 質問です - 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(); 
    
    関連する問題