
所以
sql
SET @form_json = '假如这个是你报错的字符串'
SET @form_json = REPLACE(@form_json, '\n', '\\n');
SET @form_json = REPLACE(@form_json, '\t', '\\t');
SET @form_json = REPLACE(@form_json, '\r', '\\r');
替换成对应的多加一个反斜杠符号的字符串就好了
其实也就是说报错的路径是
- SQL解析器
- 将'\n'解释为一个换行符
- 是否是合法的JSON字符串
- 由于JSON字符串中换行必须用\n表示,也就是说 原来的 字符串 在被 解析后 , 得到 的应该是 XXX\n XXX (合法的) ,但是由于没针对反斜杠符号 进行转义(也就是写成 \n 这样 解析后就会成 \n), 所以 直接被 解析成了换行符, 最终结果变成了
XXX
XXX (不合法)
- 由于JSON字符串中换行必须用\n表示,也就是说 原来的 字符串 在被 解析后 , 得到 的应该是 XXX\n XXX (合法的) ,但是由于没针对反斜杠符号 进行转义(也就是写成 \n 这样 解析后就会成 \n), 所以 直接被 解析成了换行符, 最终结果变成了