我已经详尽地搜索了stackoverflow和mysql文档中的几乎所有资源,但是我无法使用JDBC插入俄语文本 . 我非常感谢您对我所缺少的任何指导 . 请在下面找到两种方法 .
方法1:
- 用utf8创建了DB
创建数据库apprev DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
- 使用utf8字符集创建表
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)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
请让我知道我错过了什么 .