现网业务运行过程中,可能会遇到数据库表字段值包含特殊字符的场景,此场景虽然不常见,但只要一出现,其影响却往往是致命的,且排查难度较高,非常有必要了解一下。
表字段值中的特殊字符可以分为两类:可见字符、不可见字符。
可见字符处理
业务的原始数据一般是文本文件,因此,数据插入数据库表时需要按照分隔符进行分割,字段值中包含约定的分隔符、文本识别符都属于特殊字符。
常见的分隔符:,
|
;
文本识别符:''
""
这种特殊字符会导致数据错列,json
无法翻译等问题,严重影响业务运行,应该提前处理掉。有人就说了,我接手的别人的数据库,不清楚是不是存在这个问题,这个咋办呢?没关系的,一条update
语句就可以拯救你。
-- 语法
UPDATE
table_name
SET
column_name = REPLACE(column_name, old_text, new_text)
WHERE
condition;
-- 应用样例
UPDATE
customer
SET
email = REPLACE (email, '|', '_');
不可见字符处理
上边讲述了可见字符的处理,对于不可见字符例如:换行符LF
、回车键CR
,又该如何处理呢?别怕,sql支持unicode
编码,把换行符、回车键对应的unicode
编码转换为空就好了。
UPDATE `WORKORDER`
SET WORKID = REPLACE(REPLACE(WORKID, CHAR(10),''), CHAR(13),'');
-- 这里使用了函数的嵌套,一条语句完成了换行符和回车键的转换,也可以转换两次。