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}, 

{“种类”:“软件”,“功能”:[“iosUniversal”],“支持的设备”:[“所有”],“

它似乎是utf8。我尝试在所有适当的地方设置utf8,但未能成功保存到mysql。

在 5.1 和 5.5 mysql 数据库上,通过使用连接器/J 的 jdbc 观察到以下行为。

这是我尝试过的事情:(a)只使用默认值。不起作用,ascii 字符很好,但 CJK 字符不行。

(b) 在任何地方设置 utf8:在连接中,在表中,在连接和客户端中。没有更改/不成功正确存储 utf8 字符(它们显示为?等)。回答 jim 的问题: 使用 mysql 提示符直接在 mysql 服务器上检查数据,字符编码为 utf8。

  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":"âë°°ë¬ ì¬ê³  í¹ì ì¥ë주문 ë°©ì§ë¥¼ ìí´ í´ëí°ì¸ì¦ì ì¤ìí©ëë¤

此外,我会提到数据被验证为正确,因为相同的数据被写入亚马逊 s3 并且它是正确的(韩文字符在那里是完整的)。

4

1 回答 1

2

要将 utf8 存储到 mysql,您应该将表列定义为 utf8 字符集,并使用 UTF-8 字符编码创建连接。正如你在这里看到的:

        //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 回答