首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在base64编码的MySQL字段中搜索时需要帮助

在base64编码的MySQL字段中搜索时需要帮助
EN

Stack Overflow用户
提问于 2014-01-07 02:03:03
回答 2查看 9.4K关注 0票数 2

我正在尝试在用base64 (用于国际字符)编码的MySQL字段中查找字符串

常用搜索:

代码语言:javascript
复制
$sql = "SELECT * FROM table WHERE field LIKE '%term%' ";

我已经尝试过了:

代码语言:javascript
复制
$sql = "SELECT * FROM table WHERE field name LIKE '%".base64_encode($term)."%'  ";

但它并不总是有效的,这取决于搜索词的长度...由于某种原因,每当我的项是奇数长时,它都会给出结果。

我也尝试过使用MySQL函数TO_BASE64()FROM_BASE64(),但都不起作用……

有人能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-07 02:08:38

您需要将输入值与base64解码的存储值进行比较,因此稍微取消对存储值调用FROM_BASE64()的尝试,并将其与普通输入值进行比较。如果对部分匹配进行了编码,则不能在$term中对其进行比较,因为部分值永远不会生成与完整存储值相同甚至相似的base64字符串。

代码语言:javascript
复制
SELECT * FROM `table` WHERE FROM_BASE64(`field`) LIKE '%$term%'

在这个上下文中,$term是一个普通字符串,而不是base64编码的。当然,建议将$term作为绑定参数,而不是连接到查询中的普通PHP变量。

然而,这将是。如果您想要更改数据的存储方式,强烈建议您以未编码的形式存储数据。每个查询都需要对每一行进行base64解码才能找到匹配的行,这是非常低效的。

另请注意,TO_BASE64(),FROM_BASE64() were recently added in MySQL 5.6.1可能在许多安装中不可用。你真的应该改变数据存储的方式,以消除编码。

票数 7
EN

Stack Overflow用户

发布于 2015-04-28 14:59:11

如果您不想升级到MySQL 5.6或更高版本,您可以使用以下技巧来消除填充问题:

代码语言:javascript
复制
SELECT * FROM `table` WHERE
field LIKE '%" . base64_encode($term) . "%' 
OR field LIKE '%" . substr(base64_encode($term .'a'),0,-4) . "%' 
OR field LIKE '%" . substr(base64_encode($term .'aa'),0,-8) . "%' 
OR field LIKE '%" . substr(base64_encode($term .'aaa'),0,-12) . "%'

因此,避免了搜索项长度问题。根据$term的长度,您可以通过仅使用四个LIKE中的一个来优化此查询。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20956296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档