我可以使用java / jdbc成功写入mysql数据库表,用于unicode文本“приветмояработапрограммист”
当我在Windows 10上使用mysql命令提示符搜索数据库表时,我看到表中的确切文本。
但是当我使用java jbdc读回文本时,结果集中的文本如下
привÐμÑ,моÑÑабоÑ,апрограммиÑÑ,
我用来调用的网址是
jdbc:mysql://localhost/dbname?useUnicode=true&characterEncoding=utf-8
我使用以下代码
PreparedStatement ps = con.prepareStatement(SELECT_STATEMENT_EMAIL);
ps.setString(1, idemail);
ps.setString(2, password);
ResultSet res = ps.executeQuery();
if (res.next()) {
String description = res.getString("description");
}
我已使用以下命令将数据库和数据库表转换为utf8
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
有人能指出我正确的方向吗?
答案 0 :(得分:0)
答案 1 :(得分:0)
我担心你有两个问题。
привет м
听起来像是Mojibake。
在尝试解码时,我得到привет мо� работа программи�т
。黑色钻石通常来自输出页面上的错误<meta...>
。但他们必须来自其他地方。
没关系。我看到я
是D18F
。但8F
,被视为latin1似乎是一个非打印字符,从而搞乱了2字节utf8代码的节奏,导致黑色钻石。
解码是BINARY(CONVERT(col USING latin1))
,但我怀疑不能依赖。
Mojibake通常来自
SET NAMES latin1
(或set_charset('latin1')
或...)相关联。 (应该是utf8
。)CHARACTER SET latin1
。 (或者它可能是从表/数据库继承的。)(应该是utf8
。)CHARACTER SET utf8
,也可能不是SELECT col, HEX(col) FROM ... WHERE ...
,但应该是这样。所以,这给你两件事要修理。抱歉,我不认为表中的数据可以修复。但是,如果您提供я
来显示该字符串,或者至少包含一些包含с
或Table User
id (pk) | user_name
1 | a
2 | b
3 | c
Table Post
id (pk) | user_id (fk)
1 | 1
2 | 3
3 | 2
4 | 2
Table Block
id (pk) | block_by (fk) | blocked_to (fk)
1 | 1 | 2
的字符串,我可以更深入地了解。