前端用escape编码一段中文后(比如“2018年世界杯法国是冠军”),写入数据库某字段A中(此时数据库中存储的是一堆乱码,比如“36ee@jeaj%ferui&9#3w94-3434”)
那么问题来了,我要在前端模糊查询关键字“世界杯”,如何用select * from table where A like ‘%世界杯%’能够检索到呢?
使用select语句就行了
用你所使用的语言实现js escape编码,编码查询的内容后再like这段内容
C#的看这个,其他语言自己百度下,都有对应的escape实现
https://blog.csdn.net/junjielu/article/details/1479037
后端解码后再查询不就行了
后端的存储格式不影响你前端查询吧,前端select * from table where A like ‘%世界杯%’应该就可以,
可以自己编写针对前端编码的SQL解码函数,不过不建议这样做,因为这个方法的性能远没有C#或者JAVA解码的性能高。建议用服务器端语言解码后,再组成SQL语句。
把关键字按照同样的编码方式编码作为条件查询
1.试过的:前端或服务器编码后再select,这个方法不可行,会不准确的。(比如图片的编码非常大,很有可能你这个关键字编码后就是图片编码里的一部分,但不是关键字。诸如这种情况很多....)
2.SQL解码函数这个应该可行,我也觉得效率是个问题!加入数据表中有100万数据量,我select之前还得用函数解码,可想而知的慢。
我自己想到的解决办法就是:
直接在富文本框里,把文字的部分截取前500字节(同时去除图片等复杂部分),放在一个新字段B里(以明文方式存储),以后select检索就从B中检索。
试过了,效果不错。(人为习惯:如果一篇文章,如果前500字节都没有提到关键字,那这篇文章也不是好文章啊。哈哈)
为什么数据库存转义后字符? 你的目的只是传中文怕乱码么?前端encode 接收再decode,后台存值即可