0

我有一个数据库,该数据库将值存储在一个复杂的序列化数组中,其中一个组件是字符串,另一个是字符串字符的长度,格式如下:

s:8:"test.com"

其中“s”保存引号中字符串的字符长度。

我想将字符串从“test.com”更改为“testt.com”,并且在 SQL 中使用以下语句:

UPDATE table SET row=(REPLACE (row, 'test.com','testt.com'))

但是,这会破坏有问题的脚本,因为它不会更新存储“test.com”的字符串之前的“s”中的字符长度。

我想知道是否可以使用一个查询来替换字符串,然后在替换发生的位置之前增加这个“s”的值,如下所示:

UPDATE table SET row=(REPLACE (row, 's:' number 'test.com','s:' number+1 'testt.com'))

有谁知道这种查询是否可能?

4

3 回答 3

0

如果您需要更改确切的字符串,请使用确切的查询 -

UPDATE table SET row = 's:9:"testt.com"' WHERE row = 's:8:"test.com"';
于 2013-04-05T20:27:03.453 回答
0

该字符串是一个“序列化字符串”。

如果要替换多个字符串,则创建一个脚本来处理它可能会更容易。

在 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';";

这样,您可以根据需要创建一个精确的查询字符串。如有必要,请填写正确的数据库连接代码。

于 2013-04-05T20:35:03.127 回答
0
UPDATE table set row = concat('s:',length('testt.com'),':"testt.com"');
于 2013-04-05T20:44:00.327 回答