我遇到了最奇怪的问题:
我正在尝试使用此列作为数据格式的计数:
"{\"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\"}}"
它的存储方式与TEXT类型列中的引号和所有内容完全相同。
(这是我正在使用的旧系统。)
答案 0 :(得分:1)
您显示的数据样本看起来像JSON。 MySQL 5.7中有一些功能可以搜索JSON结构:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
没有理由在数据库中存储反斜杠。插入此数据时是否意外地两次转义了?
答案 1 :(得分:1)
我相信MySQL中的反斜杠也是一个转义符号,这是在查询中唯一需要转义的内容(如果使用单引号,则无论如何都应如此)。要转义反斜杠,只需重复一下:
select * from mytable where col like '%isError\\":true%'
Bill提出了一个很好的观点-从长远来看,最好以不同的方式存储JSON。
答案 2 :(得分:0)
我找到了答案。
要使用LIKE搜索字符串中的转义反斜杠,必须使用四个反斜杠。不直观,但确实如此。
感谢您的帮助。希望这对以后的人有所帮助。