我需要在将对象放入 MySql 之前对其进行序列化吗? [复制]

Posted

技术标签:

【中文标题】我需要在将对象放入 MySql 之前对其进行序列化吗? [复制]【英文标题】:Do I need to serialize an object before putting it into MySql? [duplicate] 【发布时间】:2020-07-25 04:38:45 【问题描述】:

我已经用 JAXB 反序列化了一个 XML 文件。现在我有了带有信息的类,这要归功于 xml 文件。现在我需要将数据放入mysql中,是否需要再次序列化例如JSON?

【问题讨论】:

请,不,不要这样做。这违背了使用数据库的目的 【参考方案1】:

如果要将对象放入数据库列中,则需要对其进行序列化。

但是 - 有很多原因可以说明为什么您不应该将序列化对象放入数据库列中。最重要的是,tatabase 表中的序列化数据 (JSON) 不可查询……除了使用%LIKE% 的最粗略方式。

一个更好的想法是将 Java 类的字段映射到表的列。这可以手动完成,也可以使用诸如 Hibernate / JPA 之类的 ORM 技术。

另一种选择是使用所谓的 JSON 数据库,例如 CouchDB 或 MongDB。

【讨论】:

【参考方案2】:

使用 mySQL 或任何其他关系数据库的目的是将数据存储为单独的属性。在关系数据库中使用 JSON 会将所有数据输入到一列中,而不是为每条数据设置单独的列。

如果您真的想以 JSON 格式存储数据,可以尝试使用 NoSQL 数据库,例如 MongoDB。在 MongoDB 中,数据以 JSON 格式存储。

【讨论】:

【参考方案3】:

嗯,MySQL 不能将您的 Java 对象直接存储在数据库中。您需要将其转换为 MySQL 支持的primitive data type。

通常,对象在其serialized form 中存储为BLOB。但是,这种方法有几个缺点,可能最重要的一个是它对读取数据的限制:如果不费吹灰之力,就无法从不同的语言中读取它。此外,数据以人类不可读的形式存储。另一方面,这种方法可能会避免您在下次从数据库中读取它之后再次对其进行解组。

您也可以将其存储为string,以 XML 或 JSON 等人类可读的形式。我看不到将其存储为 JSON 而不是 XML 的任何价值,除非 JSON 可以为您节省一些额外的字节,但我认为这样做不值得。通过这种方法,数据以人类可读的形式存储,并且可以使用任何语言轻松读取和解组,这与序列化形式不同。虽然这些优点不是免费的,但你也有一个缺点:它的尺寸要重得多 - 但一开始你不应该担心,除非你对存储有严格的要求。

我不建议将对象存储为单个值,您可能希望将每个字段存储在单独的列中。在这种情况下,您需要ORM tool 来帮助您。

【讨论】:

以上是关于我需要在将对象放入 MySql 之前对其进行序列化吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在将无限的文本流写入文件之前对其进行预处理?

在将 SCNPhysicsVehicleWheels 导入 Xcode 之前对其进行缩放

如何在将应用发布到 Google Play 之前对其进行测试

是否有必要在将聊天消息存储到 Firebase 之前对其进行加密?

如何在将图像提供给 CoreML 模型之前对其进行预处理?

如何在将 json 发布到 React 组件状态之前对其进行处理?