数据库中的JSON与序列化数组

Ine*_*nez 70 php mysql serialization mysql-json

在MySQL数据库与序列化数组中存储JSON数据有哪些优缺点?

Mar*_*lin 93

  1. JSON encode()和decode()
    • PHP版本> = 5.0.0
      • 嵌套限制为20.
    • PHP版本> = 5.2.3
      • 嵌套限制为128.
    • PHP版本> = 5.3.0
      • 嵌套限制为512.
    • 与PHP的序列化字符串相比,占用空间小.
  2. serialize()&unserialize()
    • PHP版本> = 4.0.0
      • PHP数据类型对象上的方法不会丢失.
      • __wakeup()魔法方法调用任何反序列化的对象.(很强大)
      • 已经注意到,放入数据库的base64编码字符串是最好的,并且使用此函数从数据库中取出的base64解码字符串,因为处理一些空格字符存在一些问题.

这是你的选择.

  • 为__wakeup()投票. (15认同)

Mar*_*ius 84

Pro JSON:

  • JSON数据可以被许多不同的语言使用,而不仅仅是PHP
  • JSON数据是人类可读和可写的.
  • 它占用的空间更少
  • 编码JSON比编译序列化更快

专业序列化数组:

  • 反序列化比JSON解码更快

正如评论所示,JSON占用的空间比序列化数组少.我还检查了JSON或Serializing是否更快,令人惊讶的是,JSON编码比Serialize更快.然而,反序列化要比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>
Run Code Online (Sandbox Code Playgroud)

  • PHP序列化格式包括元素的长度(字符串和数组),这就是为什么它比json写入慢(json不存储它)但更快阅读(当你知道你在阅读文件时的期望时,要实现的条件逻辑,例如导入一个2000个字符的字符串就足以读取下一个2000个字符而不检查每次当前字符是否表示字符串的结尾,就像它为json_decode所做的那样) (3认同)

Ala*_*orm 29

可移植性:Winner JSON.JSON在更广泛的平台上受支持,而PHP反序列化仅由PHP支持(据我所知).虽然可以用任何语言解析任何一种格式,但JSON有更多的预构建库.

未来证明:获胜者JSON.JSON是一个"标准",从某种意义上说,Javascript是一个标准,并且不太可能在将来的任何时候发生变化.PHP小组对序列化格式的未来没有任何承诺,虽然将来不太可能改变,但是单个组控制格式这一事实意味着你可能最终得到的数据是不可读的.

富达:赢家PHP.PHP序列化将允许您使用本机PHP数据类型存储数据,包括自定义类定义的对象.JSON只允许存储通用基元类型,基元类型列表("数组")和键/值对象.如果您正在开发PHP应用程序,PHP序列化可能会提供一些优势.

文件大小:JSON在这里略有胜利,因为PHP的当前序列化格式更加冗长(因为它存储了更多信息).

表现:谁知道,这取决于,个人资料.

结论:除非您有令人信服的理由使用PHP序列化,否则请使用JSON.


Tom*_*igh 7

JSON更具可移植性,即您可以更轻松地从不同语言读取/写入等.如果您使用PHP序列化数组,您将只能轻松使用PHP来访问它.


小智 7

您是否仅将数据用于PHP?如果是:数组,如果否:JSON.

专业阵列

  • 会话使用序列化:我认为它比json_encode/decode更快(不太确定)
  • PHP中的数组上的许多函数(排序/合并/ ...)

Pro JSON

  • JSON以其他语言和网络语言而闻名
  • 在数据库中不那么冗长
  • 许多工具,如XML:JSON SChema