首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置数据库uft8mb4后,黑色菱形和问号仍然存在

设置数据库uft8mb4后,黑色菱形和问号仍然存在
EN

Stack Overflow用户
提问于 2018-09-30 06:28:38
回答 2查看 1K关注 0票数 3

关于MySQL数据库和Java JDBC连接编码。数据库已转换为utf8mb4和utf8mb4_unicode_ci,如下所示:这是来自JDBC连接的SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';的结果。

+--------------------------+--------------------+
|      Variable_name       |       Value        |
+--------------------------+--------------------+
| character_set_client     | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database   | utf8mb4            |
| character_set_filesystem | binary             |
| character_set_results    | utf8mb4            |
| character_set_server     | utf8mb4            |
| character_set_system     | utf8               |
| collation_connection     | utf8mb4_unicode_ci |
| collation_database       | utf8mb4_unicode_ci |
| collation_server         | utf8mb4_unicode_ci |
+--------------------------+--------------------+

从Unicode和直接连接到DB的终端中,我可以看到MySQL字符í及其正确的十六进制值c3 ad

+------------------------------+
| HEX(location.name)           |
+------------------------------+
| C3AD                         |
+------------------------------+

JDBC连接设置:useUnicode=true&characterEncoding=UTF-8

通过以下配置使用HikariCP

config.addDataSourceProperty("useUnicode", "true"); config.addDataSourceProperty("characterEncoding", "utf-8"); config.setConnectionInitSql("SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci");

使用mysql-connector-java:8.0.11

在Postman中,从使用JDBC连接查询相关表的结果中,í字符被作为返回。并且在Postman中作为?返回。

根据stackoverflow.com/questions/38363566的说法,这让我相信我在阅读过程中的连接不是UTF-8,我如何检测到这一点?

如果需要,数据库和应用程序已重置为应用设置。

EN

回答 2

Stack Overflow用户

发布于 2018-09-30 07:55:18

除了遵循VGR的帮助之外,我还使用了一个普通的PrintWriter来发送响应,这不允许使用UTF8编码。而不是

PrintWriter out = response.getWriter();
out.println(res);
out.flush();

替换为

response.getOutputStream().write(res.toString().getBytes("UTF-8"));
票数 0
EN

Stack Overflow用户

发布于 2018-10-11 11:10:31

"í character is returned as “与”is returned as ?“是不同的问题。

前一种情况通常发生在í的字节未编码为UTF-8时。注意,在MySQL中,对于该字符和所有其他欧洲字符的正确编码,utf8mb3和utf8mb4是相同的。修复连接(如VGR所讨论的)可能不会修复它。只有当浏览器未设置为UTF-8 (Unicode)时,才会出现黑色菱形。

“一堆便便”只能在utf8mb4中使用,而不能在utf8mb3中使用。因此,假设客户端正确地具有十六进制F09F92A9,那么连接参数(参见VGR)可能是导致问题的原因。

(在您提供的链接中有更多讨论。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52573061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档