我有一个数据库,它在一个复杂的序列化数组中存储了值,其中一个组件是一个字符串,另一个是字符串字符的长度,格式如下:
S:8: “test.com”
其中“s”包含引号中字符串的字符长度。
我想将字符串从“test.com”更改为“testt.com”,我在SQL中使用以下语句:
UPDATE表SET行=(REPLACE(行,'test.com','testt.com'))
但是,这会破坏相关脚本,因为它不会更新存储“test.com”的字符串前面的“s”中的字符长度。
我想知道是否有一个可以用来替换字符串的查询,然后在更换发生的地方之前增加这个“s”的值,如下所示:
UPDATE表SET行=(REPLACE(行,'s:'number'test.com','s:'number + 1'testt.com'))
有人知道这种查询是否可行?
答案 0 :(得分:0)
如果您需要更改确切的字符串,请使用完全查询 -
UPDATE table SET row = 's:9:"testt.com"' WHERE row = 's:8:"test.com"';
答案 1 :(得分:0)
字符串是“serialized string”。
如果要替换多个字符串,可能更容易创建一个脚本来处理它。
在PHP中,它是这样的:
$searchfor = serialize('test.com');
$replaceby = serialize('testt.com');
// strip last semicolon from serialized string
$searchfor = trim($searchfor,';');
$replaceby = trim($replaceby,';');
$query = "UPDATE table SET field = '$replaceby' WHERE field = '$searchfor';";
这样,您可以根据需要创建精确的查询字符串。 如有必要,请填写正确的数据库连接代码。
答案 2 :(得分:0)
UPDATE table set row = concat('s:',length('testt.com'),':"testt.com"');