0

我有 2000 个产品的行使用序列化数据,我需要更新特定字符串

这是行名数据

a:35:{s:11:"expire_days";s:3:"30d";s:12:"trial1_price";s:0:"";s:11:"trial1_days";s:0:"";s:12:"is_recurring";s:0:"";s:10:"start_date";s:0:"";s:5:"terms";s:24:"$150 for 1 Per license";s:12:"rebill_times";s:0:"";s:15:"paypal_currency";s:0:"";s:4:"##11";N;s:3:"url";s:0:"";s:8:"add_urls";s:0:"";s:4:"##12";N;s:5:"scope";s:0:"";s:5:"order";s:4:"1010";s:11:"price_group";s:1:"7";s:13:"renewal_group";s:2:"28";s:14:"need_agreement";s:0:"";s:13:"require_other";a:1:{i:0;s:0:"";}s:16:"prevent_if_other";N;s:4:"##13";N;s:19:"autoresponder_renew";s:0:"";s:16:"dont_mail_expire";s:0:"";s:13:"joomla_access";s:2:"36";s:10:"files_path";s:108:"products/Boxes8.zip|Box 8
products/Boxes9.zip|Box 9";s:14:"download_count";s:0:"";s:18:"download_unlimited";}

我唯一需要改变的是
s:24:" $150 for 1 Per license ";

任何帮助表示赞赏。

4

2 回答 2

1

您可能应该SELECT对该行进行更改,然后UPDATE使用新值。如果您需要做这个数据库方面的工作,这个问题的答案可能会有所帮助。

如何在 MySQL 中进行正则表达式替换?

于 2012-08-11T17:50:42.443 回答
0

如果您想用其他内容替换该单个字段的,可以使用以下查询:

UPDATE table SET col = CONCAT(
  LEFT(col, LOCATE('s:24:"', col) + 5),                  -- up to and including the opening quote
  'Now for free',                                        -- new replacement text
  SUBSTR(col, LOCATE('"', col, LOCATE('s:24:"', col)+6)) -- closing quote and everything after that
) WHERE col LIKE '%s:24:"$150 for 1 Per license"%'

请注意,可能会出现问题:如果您的某个字段的值应该以 结尾's:24:',那么加上结束引号的值会被误解为您正在查看的位置。我认为这种风险不太可能,但如果您想安全地进行操作,您可能需要使用可以处理带引号的字符串和转义引号的复杂正则表达式来检查它。

于 2012-08-11T18:15:53.343 回答