我遇到了一个最奇怪的问题:
我正在尝试获取数据格式为this的列的计数:
"{\"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\"}}"
它存储在文本类型列中,外引号和所有内容。
(这是我正在开发的一个遗留系统。)
发布于 2018-07-20 07:07:11
我找到了答案。
要在字符串中搜索转义反斜杠,在LIKE中,您必须使用四个反斜杠。这不是直觉,但事实就是如此。
谢谢你的帮助。希望这对将来的人有所帮助。
发布于 2018-07-20 02:04:33
您显示的数据示例看起来像JSON。JSON5.7中有一些搜索MySQL结构的函数:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html
没有理由在数据库中存储反斜杠。您是否在插入此数据时意外地进行了双重转义?
发布于 2018-07-20 02:21:59
我相信MySQL中的反斜杠也是一个转义符号,这是查询中唯一需要转义的东西(如果使用单引号,无论如何都应该转义)。要转义反斜杠,只需重复一次:
select * from mytable where col like '%isError\\":true%'
不过,Bill提出了一个很好的观点--从长远来看,以不同的方式存储JSON会更好。
https://stackoverflow.com/questions/51429051
复制相似问题