【发布时间】:2019-03-05 11:56:59
【问题描述】:
关于 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 |
+--------------------------+--------------------+
从 MySQL Workbench 和直接连接到数据库的终端,我可以看到 Unicode 字符 í,其正确的十六进制值是 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
根据使用 JDBC 连接查询相关表的结果,í 字符在 Postman 中返回为 �。 ???? 在 Postman 中返回为 ?。
根据stackoverflow.com/questions/38363566,这让我相信我在阅读过程中的连接不是 UTF-8,我将如何检测到这一点?
如果需要,数据库和应用程序已重置以应用设置。
【问题讨论】:
标签: java mysql jdbc payara utf8mb4