一般对于博客程序来说,使用替换语句也许是最有用的一种维护方式了,特别是对于所有博文内容里有统一修改的地方。由于我的博客站点在upload图片上传目录下需要按年建目录,这倒不是什么难点,可是之前上传的图片都要移动到相应的目录里,这样的话博文里所有的图片URL都要改变。
比如图片a.jpg原来在upload路径下,博文里的地址是
现在要把a.jpg移动到upload下的2012文件夹里,那么博文里的地址就需要改变成
这样才能访问移动后的图片。如果是单处修改还好,如果所有文章的图片地址都需要修改,显然通过后台一篇一篇的改有点力不从心,并且可能会遗漏。像这样的情况,我们可以使用MySQL的替换语句。由于图片地址目录都一样是www.qttc.net/static/upload
,我们只需要把这部分都统一修改成www.qttc.net/static/upload/2012
就好。
SQL语句
UPDATE 表名
SET 字段名 = REPLACE(字段名, '搜索的字符串', '替换的字符串')
WHERE INSTR(字段名,'搜索的字符串') > 0
这个语句的用法特别简单,使用MySQL的REPLACE()
替换函数即可实现,REPLACE函数的第一个选项是字段名,第二个选项是要搜索的字符串,第三个选项是替换的字符串。最后那一句INSTR()
函数是模糊查询方法,效果跟使用LIKE()
函数一样,表示只替换查询到的数据。
如我的表名blog,博文内容字段名b_content
,那么这个需求的SQL语句就可以这么写
UPDATE blog
SET b_content = REPLACE(b_content, 'www.qttc.net/static/upload', 'www.qttc.net/static/upload/2012')
WHERE INSTR(b_content,'www.qttc.net/static/upload') > 0
执行后再来看看博文中所有图片的链接地址,都已OK。
其实REPLACE()
函数还有很多诸如类似需要用到的地方,比如把博文的空格删掉
UPDATE blog
SET b_content = REPLACE(b_content, ' ', '')
WHERE INSTR(b_content,' ') > 0
但是感觉用MySQL的TRIM()
清除空格函数会更好一些
UPDATE blog SET b_content = TRIM(b_content)
这样也可以实现清除空格效果