sql >> データベース >  >> RDS >> Mysql

mysqlでシリアル化された配列を更新しています(シリアル化を解除せずに?)

    そのように検索して置き換えるだけでは、シリアル化されたデータを使用できなくなります。行う必要があることは次のとおりです。

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

    $oldを置き換えます および$new 現在のURLとターゲットURLを使用して、スクリプトを実行し、生成された$queryを実行します。 。

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

    これにより、シリアル化された配列で出現するすべての検索文字列が置き換えられることに注意してください。特定のキーを置き換える場合は、もっと具体的にする必要があります。



    1. 正規表現またはLIKEパターンのエスケープ関数

    2. あるテーブルから別のテーブルに値をコピーするSQL

    3. MariaDB JSON_MERGE_PRESERVE()の説明

    4. データベースの問題に挿入...(不正な文字コーディング)PHP / MYSQL