【发布时间】:2021-01-22 13:20:55
【问题描述】:
我对 MySQL 中的 JSON 数据类型有疑问。在该专栏中,我正在编写基于斯洛文尼亚字母的值。
这是一个使用 ObjectMapper 编写的示例:
{ "formState": [{"label": "Zaduženi", "value": "Test 1"}, {"label": "Tip", "value": "Fizičko"}] }
我正在使用 JPA 从 MySQL 数据库中获取数据,并且在有效负载中我得到如下内容:
{ "formState": [{"label": "Zaduženi", "value": "Test 1"}] }
我用来表示这个 JSON 的 Java 数据类型是 Map (HashMap)。
数据源url为:jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false
有人可以帮我解决这个问题吗?
提前谢谢你。
【问题讨论】:
-
某处 UTF8 被视为 ASCII。您必须检查并确保您的数据库、表和字段都使用
utf8mb4字符集。这种处理该字母的特定方式似乎不在 Java 方面。 -
@coladict 我的数据库是通过这个命令创建的:CREATE DATABASE test_db CHARSET utf8 COLLATE utf8_slovenian_ci;
-
@coladict 在特定表上将字符集从 utf8 更改为 utf8mb4 没有帮助。
-
那么您必须检查控制台是否存储正确或损坏。这将帮助您缩小问题的根源。之后我会尝试的下一件事是调试应用程序。在 JDBC 驱动程序中的
setString(int, String)、getString(int)上放置一个断点并禁用它们,然后在代码中的查询处放置一个断点,然后在驱动程序中启用它们。您应该在执行期间看到在哪个阶段对变量做了什么。 -
@coladict 当我将 JSON 更改为 TEXT 时,它运行良好。但我需要该列是 JSON 类型。
标签: mysql json spring-boot jpa objectmapper