PHP:用于存储在 MySQL 数据库中的 json_encode 与序列化?

标签 php json serialization

我在我的表的一个字段中存储了一些“非结构化”数据(一个键控数组),我目前正在使用 serialize()/unserialize() 从数组到字符串来回“转换”。

然而,在反序列化数据时,我时不时会遇到错误。我相信这些错误的发生是因为我正在序列化的数组中字符串中的 Unicode 数据,尽管有一些带有 Unicode 数据的记录工作得很好。 (DB字段为UTF-8)

我想知道使用 json_encode 而不是序列化是否会有所作为/使它更有弹性。这对我来说不是微不足道的测试,因为在我的开发环境中一切正常,但在生产中,时不时(大约 1% 的记录)我得到一个错误。

顺便说一句,我知道我正在逃避寻找问题的实际解释并只是盲目地尝试一些事情,我有点希望我可以在不花太多时间的情况下摆脱它。

您认为使用 json_encode 而不是序列化会使它对“序列化错误”更有弹性吗?数据格式对我来说确实看起来更“宽容”......

更新:我得到的实际错误是:

 Notice: unserialize(): Error at offset 401 of 569 bytes in C:\blah.php on line 20

谢谢! 丹尼尔

最佳答案

JSON 有一个主要优势:

  • 与 PHP 以外的其他语言的兼容性。

PHP 的serialize 有一个主要优势:

  • 它专为存储基于 PHP 的数据而设计——最值得注意的是,它可以存储序列化对象、类实例,当字符串被反序列化时,这些对象将重新实例化为正确的类类型。

(是的,那些优势恰恰相反)


在您的情况下,由于您存储的数据不是真正结构化的,因此两种格式都应该可以很好地工作。

并且您遇到的编码问题不应该与序列化本身相关:只要所有内容(数据库、数据库连接、PHP 文件...) 都是 UTF-8,序列化也应该有效。

关于PHP:用于存储在 MySQL 数据库中的 json_encode 与序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5351741/

相关文章:

xml - 如何使用 Java API 在 Marklogic 中搜索 XML 标签或 JSON 键

java - 如何将对象写成人类可读的文本文件

PHP PDO |在嵌套 for 循环中调用存储过程调用的 execute() 和 fetchAll()

php - PHP变量的永久存储?

php - 使用 html 5 或 php 来操作服务器上的文件

python - 为什么我不能通过 id 更新嵌套序列化器?

entity-framework - 在模型中使用 Entity Framework 复杂类型时,示例不适用于 Web API 帮助页面

php - PDO 查询 fetchAll 删除键但保留包括重复项的值

java - Dropwizard 应用程序中带有 ChunkedOutput 和 JSON 的 Jersey

javascript - 如何将 JSON 对象添加到另一个 JSON 文件中的数组