概要简述
要实现的功能很简单,在更新文章的时候,先把文字内容上传给项目后台进行存储,图片上传则是异步进行,先上传到对象存储平台,再由对象存储平台调用回调函数通知项目后台图片在云存储上的位置信息
问题说明
问题就出在将文字内容上传给项目后台这一步,当时使用的SQL语句如下
UPDATE wechat_essay SET essay_content = ${content}, essay_user_image_url = NULL, updated_at = NOW() WHERE id = ${id}
单独看这句SQL语句好像没啥问题,因为真正的问题并不直接发生在此处,这里只是问题的导火索
当项目后台接收到对象存储平台回调函数的结果时,会使用以下SQL语句对新增的图片进行本地数据库存储,SQL语句如下
UPDATE wechat_essay set essay_user_image_url = CONCAT(essay_user_image_url,'$%^',${image_url}) WHERE id = ${id}
其中$%^
是人为定义的多张图片之间的分隔符,由于该SQL语句有CONCAT
字符串拼接操作,用到了原先的essay_user_image_url
的值,然而由于之前更新文字内容的时候将essay_user_image_url
更新成了NULL
值,NULL
与任何字符串进行拼接最后都会变回NULL,所以最终会导致图片数据丢失并且导致浪费云存储空间
解决方法
更新文字内容的时候,将essay_user_image_url
置为空字符串,这样后续的字符串拼接工作可以顺利进行,可以置空值
但绝不能置空
!