我使用的数据库以LONGTEXT数据类型存储JSON条目.我希望能够根据JSON数据选择条目.这是一些示例数据:
{
"12f9cb0a-2218-4590-a05d-c1ffab00f693": {
"0": {
"value": "test"
}
},
"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9": {
"item": {
"0": "11"
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想选择包含"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9":{"item":{"0":"11"}}的数据,过滤掉空格(制表符,空格,换行符) REGEXP功能,我试过这个无济于事:
SELECT * FROM my_table WHERE (elements REGEXP BINARY '"4d1dfd2e-7bc1-4303-9c8c-90856e918bb9":\s*{\s*"item":\s*{\s*"0":\s*"11"\s*}\s*}');
Run Code Online (Sandbox Code Playgroud)
正则表达式测试使用Rubular和Regexpal.com,但MYSQL似乎不喜欢\ s*表达式.有人有更好的解决方案吗?
rua*_*akh 36
看来,MySQL不支持\s在正则表达式的符号,只有[[:space:]]符号(其中[:space:],一个字符类中,意味着"任何空白字符").
顺便说一句,当你这样做需要一个反斜杠-例如,当你需要的文字星号\*-你真正需要的反斜杠(例如,双\\*),如指出§12.5.2中的"正则表达式" 的MySQL 5.6参考手册:
注意
因为MySQL在字符串中使用C转义语法(例如,"\n"表示换行符),所以必须加倍\在REGEXP字符串中使用的任何" " .