base64 在执行 WHERE 之前解码 mysql 列

Posted

技术标签:

【中文标题】base64 在执行 WHERE 之前解码 mysql 列【英文标题】:base64 decode a mysql column before performing a WHERE 【发布时间】:2011-09-24 08:14:31 【问题描述】:

基本上 - 说来话长 - 但我在数据库中有一个字段被编码为 base64 字符串。

EG:这是存储在数据库中的:

YToyOntzOjIwOiJUeXBlX29mX29yZ2FuaXNhdGlvbiI7czoyMDoiTWVtYmVyIG9mIFBhcmxpYW1lbnQiO3M6ODoiUG9zdGNvZGUiO3M6NzoiUEUxIDFKQSI7fQ==

等于:

a:2:s:20:"Type_of_organisation";s:20:"Member of Parliament";s:8:"Postcode";s:7:"#postcode#";

我想要做的是选择这个字符串LIKE '%Member of Parliament%'。在执行WHERE 之前,有什么方法可以对 mysql 列进行 base64 解码?

例如:SELECT * FROM table WHERE base64_decode(column) LIKE '%Member of Parliament%'

谢谢

【问题讨论】:

base64 encode in MySQL的可能重复 你用的是什么版本的MYSQL?也许您可以为此编写一个 UDF? 可能......虽然没有答案。另外,我正在寻找解码,而不是编码。 Mysql 5.0.5 - 什么是 UDF?我在网上找到了一个存储过程,但是显然效率极低。 用户定义函数 【参考方案1】:

如果您使用的是 MySQL 5.6.1 或更高版本,则可以使用 FROM_BASE64() 函数:

获取使用 TO_BASE64() 使用的 base-64 编码规则编码的字符串,并将解码结果作为二进制字符串返回。如果参数为 NULL 或不是有效的 base-64 字符串,则结果为 NULL。编解码规则详见 TO_BASE64() 的描述。

此功能是在 MySQL 5.6.1 中添加的。

mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj','abc'

http://dev.mysql.com/doc/refman/5.6/en/string-functions.html#function_from-base64

否则,您可以使用来自:https://github.com/y-ken/mysql-udf-base64 的用户定义函数

【讨论】:

MySQL 5.1 有没有等价的功能? 我不知道,你必须用 base64.sql 定义你自己的函数 链接被破坏到wi-fizzle 感谢@ImmortalFirefly,找到另一个链接。让我知道这是否适合您。

以上是关于base64 在执行 WHERE 之前解码 mysql 列的主要内容,如果未能解决你的问题,请参考以下文章

base 64 以角度编码和解码字符串 (2+)

从标准输入解码多个base64字符串

BASE64解码之中文乱码问题

Java Base64加码解码 Base64.encodeBase64 ( ) 和 new BASE64Enccoder( ).encode( )区别

为啥我base64解码出来的字符串会带乱码

javascript 使用btoa和atob来进行Base64转码和解码