我有一个最奇怪的问题:
我正在尝试获取一列的计数,数据格式如下:
"{\"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\"}}"
它的存储方式与文本类型列中的存储方式完全相同,外部引用了所有内容。
(这是我正在开发的遗留系统。)
3条答案
按热度按时间zzwlnbp81#
我找到了答案。
要在字符串中使用like搜索转义反斜杠,必须使用四个反斜杠。不是直觉,但就是这样。
如何在mysql中搜索斜杠(\)?为什么转义(\)不是where(=)所必需的,而是like所必需的?
谢谢你的帮助。希望这对将来的人有所帮助。
f2uvfpb92#
您显示的数据示例类似于json。MySQL5.7中有搜索json结构的函数:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
没有理由在数据库中存储反斜杠。当你插入这个数据时,你是否不小心双重逃逸了?
sy5wg1nm3#
我相信mysql中的反斜杠也是一个转义符号,这是查询中唯一需要转义的东西(如果使用单引号,无论如何都应该这样)。要避开反斜杠,只需重复:
不过,bill提出了一个很好的观点——从长远来看,以不同的方式存储json会更好。