Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour du tableau sérialisé dans mysql (sans désérialisation ?)

Si vous recherchez et remplacez simplement comme cela, vous rendrez les données sérialisées inutilisables. Voici ce que vous devez faire :

$old = 'http://www.google.com';
$new = 'http://www.someplace.com';

$search = 's:' . strlen($old) .':"' . $old . '"';
$replace = 's:' . strlen($new) .':"' . $new . '"';

$query = "UPDATE config SET array=REPLACE(array, '{$search}', '{$replace}');";

Remplacer $old et $new avec vos URL actuelle et cible, exécutez le script et exécutez la $query générée .

Voici une solution purement SQL :

SET @search := 'http://www.original.com';
SET @replace := 'http://www.target.com';
UPDATE config SET array=REPLACE(array, CONCAT('s:', LENGTH(@search), ':"', @search, '"'), CONCAT('s:', LENGTH(@replace), ':"', @replace, '"'));

Notez que cela remplacera CHAQUE occurrence de la chaîne de recherche dans votre tableau sérialisé. Si vous cherchez à remplacer une clé spécifique, vous devez être plus, hein, précis.