sql >> Database >  >> RDS >> Mysql

Geserialiseerde array bijwerken in mysql (zonder de serialisatie te verwijderen?)

Als u zo eenvoudig zoekt en vervangt, maakt u de geserialiseerde gegevens onbruikbaar. Dit is wat u moet doen:

$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}');";

Vervang $old en $new met uw huidige en doel-URL's, voer het script uit en voer de gegenereerde $query uit .

Hier is een pure SQL-oplossing:

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, '"'));

Merk op dat dit ELK voorkomen van de zoekreeks in uw geserialiseerde array zal vervangen. Als je een specifieke sleutel wilt vervangen, moet je specifieker zijn.



  1. SQL om lijst met velden te retourneren die niet-NULL-gegevens bevatten

  2. mySQL De top 5 van elke categorie teruggeven

  3. C++ / mysql Connector - ongedefinieerde verwijzing naar get_driver_instance - heb de eenvoudige dingen al geprobeerd

  4. Mysql - hoe u auto-increment instelt om vanaf nul te beginnen