关于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,我如何检测到这一点?
如果需要,数据库和应用程序已重置为应用设置。
https://stackoverflow.com/questions/52573061
复制相似问题