java - 如何通过jdbc将utf8存储到mysql 5.X

标签 java mysql jdbc utf-8

我正在尝试将数据存储到 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。

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

以下是我尝试过的: (a) 只使用默认值。不起作用,ascii 字符可以,但 CJK 字符不行。

(b) 在所有地方设置 utf8:在连接中,在表中,在连接中和客户端中。没有改变/没有成功正确存储 utf8 字符(它们显示为 ? 等)。回答jim的问题:数据直接在mysql服务器上使用mysql prompt查数据,字符编码为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 末尾的悬挂双引号引起的:删除它之后 - 如上面的当前版本所示,这个特定错误消失了。但是 multi 的整体问题-字节字符在数据库中仍然是乱码)

这是错误输出的摘录,它应该有韩语字符:

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

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

最佳答案

要将 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"));

关于java - 如何通过jdbc将utf8存储到mysql 5.X,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15262133/

相关文章:

java - 如何使用 Apache Commons Net 写入远程文件?

mysql - 在 Mysql 中将字符串拆分为单个值

java - jdbc 中的未知数据库

java - NsdManager 不解析多个发现的服务

java - 您知道处理基于 Web 的白板的框架吗?

java - ElementNotVisibleException 错误

mysql - 使用mysql按两个字段排序结果顺序

php - 通过下拉列表对数据库条目进行排序

java - 多个准备好的语句或一个批处理

java - jdbc 连接,war 文件中的用户登录失败