在数据库JSON与序列化数组[关闭]在数据库JSON与序列化数组[关闭](JSON vs. Seri

2019-05-12 23:32发布

什么是存储在MySQL数据库与序列化JSON阵列数据的优势和劣势?

Answer 1:

  1. JSON 编码 ()& 解码 ()
    • PHP版本> = 5.0.0
      • 嵌套20的限制。
    • PHP版本> = 5.2.3
      • 嵌套的128限制。
    • PHP版本> = 5.3.0
      • 嵌套的512限制。
    • 占地面积小与PHP的serialize'd字符串。
  2. 序列化 ()& 反序列化 ()
    • PHP版本> = 4.0.0
      • 方法不会丢失PHP的数据类型的对象。
      • 调用的任何对象被反序列化上__wakeup()魔术方法。 (很强大)
      • 人们已经注意到,这是一些次最佳的base64编码字符串放入数据库,并BASE64解码使用此功能取出数据库的字符串,因为有一些问题的一些空白字符的处理。

这是你的选择。



Answer 2:

临JSON:

  • JSON数据可以通过许多不同的语言,而不是仅仅用于PHP
  • JSON数据是人类可读和可写的。
  • 它占用的空间较小
  • 这是更快的编码比JSON序列化

临序列化数组:

  • 这是更快,做反序列化,而不是JSON解码

作为评论表明,JSON占用比连载阵列更小的空间。 我还检查JSON序列化或是否有更快,奇怪的是,它比将序列更快的JSON编码。 这是更快,比JSON解码虽然反序列化。

这是我用来测试的脚本:

<?php 
function runTime(){
      $mtime = microtime(); 
      $mtime = explode(' ', $mtime); 
      $mtime = $mtime[1] + $mtime[0]; 
      return $mtime; 
}
?> 
<pre>
<?php
$start = runTime();

$ser;

for($i=0; $i<1000; $i++){
    $a = array(a => 1, x => 10);
    $ser = serialize($a);
}
$total = runTime() - $start;
echo "Serializing 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$json;

for($i=0; $i<1000; $i++){
    $a = array(a => 1, x => 10);
    $json = json_encode($a);
}
$total = runTime() - $start;
echo "JSON encoding 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$ser;

for($i=0; $i<1000; $i++){
    $a = unserialize($ser);
}
$total = runTime() - $start;
echo "Unserializing 1000 times took \t$total seconds";
?>

<?php
$start = runTime();

$json;

for($i=0; $i<1000; $i++){
    $a = json_decode($json);
}
$total = runTime() - $start;
echo "JSON decoding 1000 times took \t$total seconds";
?>
</pre>


Answer 3:

便携性:冠军JSON。 JSON是由PHP支持更广泛的平台,而PHP反序列化仅支持(据我所知)。 虽然可以解析两种格式的任何语言,JSON有更多的预建库。

未来证明:冠军JSON。 JSON是一个“标准”,在这个意义上,JavaScript是一种标准,并且不太可能在将来随时更改。 PHP的集团没有作出任何关于序列化格式的对未来的承诺,虽然它不太可能在将来改变,是一个集团控制的格式的事实意味着你可以用这不可读未来的数据结束了。

富达:胜利者PHP。 PHP的序列化可以让您存储与本地的PHP数据类型,包括自定义类定义的对象数据。 JSON将只允许你存储通用原始类型,原始类型的列表(“阵列”)和键/值对的对象。 PHP的序列化可以在这里提供一些优势,如果你正在开发一个PHP应用程序。

文件大小:JSON有轻微的胜利在这里,因为PHP目前的序列化格式是更详细的(因为它是存储更多信息)。

性能:谁知道,这取决于轮廓。

结论:JSON去,除非你有一个令人信服的理由使用PHP序列。



Answer 4:

JSON是更轻便,即你可以更容易地从不同的语言读/写吧等,如果你使用PHP序列化数组你只能够轻松地使用PHP来访问它。



Answer 5:

您是否使用您的DATAS只用PHP? 如果是的话:数组,如果没有:JSON。

临阵

  • 会话中使用的序列化:我觉得它比json_encode /解码速度(不是很确定)
  • 在PHP阵列的许多功能(分类/合并/ ...)

临JSON

  • JSON是知道在其他语言和网络语言
  • 在数据库更简洁
  • 很多工具,比如XML:JSON模式


Answer 6:

有很多对SO这样的问题。

优选的方法来存储PHP阵列(json_encode VS序列化)

简而言之:JSON为简单的数据较好,但它不区分对象和关联数组之间的差异。 序列化的数据是更大的。



Answer 7:

使用JSON用于阵列和JavaScript或其他语言沟通。 使用序列化对象或当前正在运行的脚本中的任何内部PHP的工作。



Answer 8:

如果youre试图绕过引号和特殊字符在您的JSON.stringify(OBJ),你可以用它的数据库特定的逃避方法,PHP这样做。

<?php
mysql_real_escape_string(htmlspecialchars($value))
?>

你现在可以安全地存储这些,当你读它回来了对其进行解码



Answer 9:

JSON序列化的节拍,因为大多数的答案已经指出。 我觉得最大的优势是它的平台无关。 你可能有其他应用程序与你的数据库沟通,他们可能没有什么做用PHP。

但是, 这两种解决方案违反数据库规范化 。 你的数据库甚至不会在第一范式 ,所以你不能拿公司,比如,搜索任何数据库功能的优势。 更好的方法是使用对象关系映射 。 有良好的图书馆在那里-例如考虑教义ORM 。



Answer 10:

我只是用PHP序列化这个大问题。 余存储大量的数据,在其中我用解序列化读取的单个字段。

发生了什么事是,我得到了在这一领域的一些腐败的数据。 序列化数据与像“一个”,“s”和“N”代码映射。 如果有损坏的数据,地图失败。 它会显示一个PHP错误的反序列化功能无法执行,因为字节码错误的工作。

所以我的观点是,以避免连载 。 去使用JSON,这样更安全,你会不会在未来的专业问题碰你的头。

对我来说,没有更多的序列化



Answer 11:

大气压,json_encode()只使用UTF-8编码的数据。因此,它不能编码的字符,如“N”,否则它返回NULL



文章来源: JSON vs. Serialized Array in database [closed]