如何使用mysql搜索转义字符串?

hmae6n7t  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(511)

我有一个最奇怪的问题:
我正在尝试获取一列的计数,数据格式如下:

"{\"errors\":0,\"results\":{\"isError\":true,\"errorCode\":305,\"errorString\":\"Contact already exists: test@gmail.com\"}}"

它是一个包含转义字符的字符串。
我在找 isError:true ,而我所做的一切都是徒劳的。
我试过了
SELECT * FROM mytable WHERE col LIKE "%isError":true%" SELECT * FROM mytable WHERE col LIKE '%isError\":true%' SELECT * FROM mytable WHERE col LIKE '%isError":true%' SELECT * FROM mytable WHERE col LIKE '%isError\\":true%' 结果都是零。
如何搜索此转义字符串?
这是全部数据。请记住,它存储为一个字符串。 "{\"errors\":0,\"results\":{\"isError\":true,\"errorCode\":305,\"errorString\":\"Contact already exists: test@gmail.com\"}}" 它的存储方式与文本类型列中的存储方式完全相同,外部引用了所有内容。
(这是我正在开发的遗留系统。)

zzwlnbp8

zzwlnbp81#

我找到了答案。
要在字符串中使用like搜索转义反斜杠,必须使用四个反斜杠。不是直觉,但就是这样。
如何在mysql中搜索斜杠(\)?为什么转义(\)不是where(=)所必需的,而是like所必需的?
谢谢你的帮助。希望这对将来的人有所帮助。

f2uvfpb9

f2uvfpb92#

您显示的数据示例类似于json。MySQL5.7中有搜索json结构的函数:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
没有理由在数据库中存储反斜杠。当你插入这个数据时,你是否不小心双重逃逸了?

sy5wg1nm

sy5wg1nm3#

我相信mysql中的反斜杠也是一个转义符号,这是查询中唯一需要转义的东西(如果使用单引号,无论如何都应该这样)。要避开反斜杠,只需重复:

select * from mytable where col like '%isError\\":true%'

不过,bill提出了一个很好的观点——从长远来看,以不同的方式存储json会更好。

相关问题