1

データを mysql に保存しようとしています。その抜粋を次に示します。

"description":"★배달 사고 혹은 장난주문 방지주 찾는 배달음식점 즐겨찾기\n지난 주문 내역 확인\n포인트 적립 및 결제\n소셜 네트워크 연동을 통한 평가 남기기\n철가방에서 제공하는 다양한 이벤트", "currency":"USD", "genres":["Food & Drink", "Lifestyle"], "genreIds":["6023", "6012"], "releaseDate":"2011-10-10T07:00:00Z", "sellerName":"sang yoon woo", "bundleId":"kr.co.helloworld.hellodelive/us/app/cheolgabang/id468583150?mt=8&uo=4", "trackContentRating":"4+", "averageUserRating":5.0, "userRatingCount":2}, 

{"kind":"software", "features":["iosUniversal"], "supportedDevices":["all"], "

utf8のようです。適切なすべての場所で utf8 を設定しようとしましたが、mysql に保存できませんでした。

次の動作は、5.1 および 5.5 mysql データベースの両方で、connector/J を使用した jdbc 経由で観察されます。

私が試したことは次のとおりです。(a)デフォルトを使用するだけです。動作しません。アスキー文字は問題ありませんが、CJK 文字は問題ありません。

(b) どこでも utf8 を設定します: 接続、テーブル、接続、およびクライアントで再び..変更なし/utf8 文字を適切に保存できません (それらは ? などとして表示されます)。ジムの質問に答えるには: データは、文字エンコーディングが utf8 の mysql プロンプトを使用して、mysql サーバー上で直接チェックされます。

  DB.execute(conn, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_connection = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'",false);
  DB.execute(conn,"drop table if exists dummy1; ",false);
  DB.execute(conn,"create table dummy1 (id int auto_increment primary key, contents blob) default charset='latin1';",false);
String insert = String.format("insert into dummy1 (contents) values ('%s');", escapedContents);
    DB.DBResult result = DB.execute(conn, insert, true);

次に、次のように接続パラメーターを追加しようとしました。

jdbc:mysql://localhost:3306/classint?useUnicode=true&characterEncoding=utf8

しかし、次のエラーが発生します。

useUnicode=true&characterEncoding=utf8" as stephenb: Unsupported character encoding 'utf8"'.

(編集注: サポートされていないエンコーディングのこのエラーは、jdbc url の末尾にぶら下がっている二重引用符が原因であることが判明しました: それを削除した後 - 上記の現在のバージョンで見られるように、この特定のエラーは消えます。しかし、マルチバイト文字の全体的な問題データベースに文字化けが残る)

以下は、韓国語の文字が含まれているはずだった、破損した出力の抜粋です。

     "price":0.00, "version":"2.1.1", "description":"âë°°ë¬ ì¬ê³  í¹ì ì¥ë주문 ë°©ì§ë¥¼ ìí´ í´ëí°ì¸ì¦ì ì¤ìí©ëë¤

さらに、同じデータが amazon s3 に書き込まれ、正しい (韓国語の文字はすべてそこにある) ため、データが正しいと検証されたことに言及します。

4

1 に答える 1

2

utf8 を mysql に保存するには、テーブル列を utf8 文字セットとして定義し、UTF-8 characterEncoding との接続も作成する必要があります。あなたがここに見るように:

        //Load jdbc driver
        Class.forName("com.mysql.jdbc.Driver");

        //Open a connection to server   
        Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8", USERNAME, PASSWORD);

        //Create statement for query
        Statement stmt = (Statement) conn.createStatement();  

        //create table column with character set utf 8
        stmt.executeUpdate("CREATE TABLE table1 (id int,name varchar(20) character set utf8);");

        //INSERT query
        stmt.executeUpdate("INSERT INTO table1 (id,name) VALUES ('12','汉语')");

        //SELECT query
        ResultSet rs=stmt.executeQuery("SELECT * FROM table1");
        System.out.println(rs.getString("name"));
于 2014-04-30T19:42:12.857 に答える