Каковы преимущества и недостатки хранения данных JSON в базе данных MySQL или сериализованном массиве?
Выбор ваш.
Как видно из комментариев, 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>
Переносимость: победитель JSON. JSON поддерживается на более широком спектре платформ, а PHP-де-сериализация поддерживается только (насколько мне известно) PHP. Хотя возможно разбор любого формата на любом языке, JSON имеет больше встроенных библиотек.
Будущее доказательство: победитель JSON. JSON является «стандартным», в том смысле, что Javascript является стандартом и вряд ли изменится в будущем. Группа PHP не давала никаких обещаний о будущем формата сериализации, и, хотя это вряд ли изменится в будущем, тот факт, что одна группа контролирует формат, означает, что вы можете в конечном итоге получить будущие данные, которые не читаются.
Верность: победитель PHP. Сериализация PHP позволит вам хранить данные с собственными типами данных PHP, включая объекты, определенные пользовательскими классами. JSON позволит вам хранить общие примитивные типы, списки примитивных типов («массивы») и объекты пары «ключ / значение». Сериализация PHP может дать некоторые преимущества здесь, если вы разрабатываете приложение PHP.
Размер файла: JSON имеет небольшую победу здесь, поскольку текущий формат сериализации PHP более подробный (поскольку он хранит дополнительную информацию).
Производительность: кто знает, это зависит, профиль.
Заключение: Идите с JSON, если у вас нет веской причины использовать сериализацию PHP.
JSON более портативен, т. Е. Вы можете легко читать / писать на нем с разных языков и т. Д. Если вы использовали сериализованные массивы PHP, вы могли бы легко использовать PHP для доступа к нему.
Используете ли вы свои данные только с PHP? Если да: массивы, если нет: JSON.
Pro Array
Pro JSON
На SO было много таких вопросов.
Предпочтительный метод хранения массивов PHP (json_encode vs serialize)
Короче: JSON лучше для простых данных, но он не различает разницу между объектом и ассоциативным массивом. Сериализованные данные больше.
Используйте json для массивов и общения с Javascript или другим языком. Используйте сериализацию для объекта или любую внутреннюю работу PHP для текущего скрипта.
если вы пытаетесь обойти кавычки и специальные символы в JSON.stringify (obj), вы можете сделать это на PHP, используя его методы экранирования, специфичные для конкретной базы данных.
<?php mysql_real_escape_string(htmlspecialchars($value)) ?>
вы можете сохранить это безопасно и декодировать, когда вы его прочитаете
JSON превосходит сериализацию, поскольку большинство ответов уже указано. Я думаю, что самым большим преимуществом является его независимость от платформы. Возможно, у вас есть другие приложения, которые свяжутся с вашей базой данных, и они могут не иметь ничего общего с php.
Но оба решения нарушают нормализацию базы данных . Ваша база данных даже не будет в первой нормальной форме, поэтому вы не сможете воспользоваться какой-либо функцией базы данных, например, искать. Лучший подход – использовать реляционное сопоставление объектов . Есть хорошие библиотеки – рассмотрим, например, доктрину ORM .
У меня просто была эта большая проблема с сериализацией php . Я сохранил много данных в одном поле, в котором я использовал unserialize для чтения.
Случилось так, что я получил некоторые поврежденные данные в этой области. Сериализовать отображение данных с помощью таких кодов, как 'a', 's' и 'N'. Если есть поврежденные данные, карта не удалась. Он покажет ошибку php, что функция unserialize не может работать из-за ошибки байтового кода.
Поэтому я хочу избежать сериализации . Пойдите с JSON , безопаснее, и вы не столкнетесь с проблемами будущих майоров.
Для меня больше нет сериализации .
atm, json_encode () работает только с кодированными данными UTF-8 .. поэтому он не может кодировать символы, такие как «-», иначе он возвращает NULL