我已经详尽地搜索了stackoverflow和mysql文档中的几乎所有资源,但是我无法使用JDBC插入俄语文本 . 我非常感谢您对我所缺少的任何指导 . 请在下面找到两种方法 .

方法1:

  • 用utf8创建了DB

创建数据库apprev DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

  • 使用utf8字符集创建表

CREATE TABLE reviewsid int(11)NOT NULL AUTO_INCREMENT,
date date NOT NULL DEFAULT '0000-00-00',
appstr varchar(45)NOT NULL,
appid varchar(45)NOT NULL,
appname varchar(45)NOT NULL,
country varchar(45)DEFAULT NULL,
version varchar(20)DEFAULT NULL,
reviewer varchar(100)DEFAULT NULL,
rev_rating varchar(20)DEFAULT NULL,
rev_title varchar(500)DEFAULT NULL,
rev_text varchar(4000)DEFAULT NULL,
last_upd_ts timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY( id ),
)ENGINE = InnoDB DEFAULT CHARSET = utf8;

  • 这是我用于使用JDBC插入数据的连接字符串

JDBC:MySQL的:// XXX:3306 / apprev useServerPrepStmts =假rewriteBatchedStatements =真了useUnicode =真&的characterEncoding = UTF-8

pstmt.setString(7,obj.get(“reviewer”) . toString() . replace(“\”“,”“)”; pstmt.setString(9,obj.get(“title”) . toString() . replace(“\”“,”“));

它因此错误而失败 .

java.sql.BatchUpdateException: Incorrect string value: '\xF0\x9F\x91\x8D' for column 'rev_title' at row 6
        at com.mysql.jdbc.PreparedStatement.executeBatchedInserts(PreparedStatement.java:1836)
        at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1456)
        at loaddata.LoadAppData.loadReviews(LoadAppData.java:256)
        at loaddata.LoadAppData.main(LoadAppData.java:557)
Caused by: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x91\x8D' for column 'rev_title' at row 6
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)

方法2:现在在引用一些stackoverflow线程后重复使用utf8mb4的步骤 .

  • create database apprev DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

  • CREATE TABLE reviews
    id int(11)NOT NULL AUTO_INCREMENT,
    date date NOT NULL DEFAULT '0000-00-00',
    appstr varchar(45)NOT NULL,
    appid varchar(45)NOT NULL,
    appname varchar(45)NOT NULL,
    country varchar(45)DEFAULT NULL,
    version varchar(20)DEFAULT NULL,
    reviewer varchar(100)CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
    rev_rating varchar(20)DEFAULT NULL,
    rev_title varchar(500)CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
    rev_text varchar(4000)CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL,
    last_upd_ts 时间戳NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY( id ),
    )ENGINE = InnoDB DEFAULT CHARSET = utf8mb4;

  • 连接字符串如下所述

JDBC:MySQL的:// XXX:3306 / apprev useServerPrepStmts =假rewriteBatchedStatements =真了useUnicode =真被character_set_server = utf8mb4

我现在能够插入 . 但我只看到“?????????”我使用jdbc加载数据时的俄语字符 .

Mysql版本是5.6.14-ndb-7.3.3-cluster-gpl

请让我知道我错过了什么 .